基于python词典列表的多个条件进行子集

时间:2017-08-01 03:06:50

标签: python dictionary

基于此Most efficient way to search in list of dicts

people = [
{'name': "Tom", 'age': 10, 'att': 12},
{'name': "Tom", 'age': 5, 'att': 12},
{'name': "Pam", 'age': 7, 'att': 23}
]

在上面的词典列表中,如何通过name == Tomatt == 12获取词典的年龄列表?仅对一个条件执行此操作:

filter(lambda person: person['name'] == 'Tom', people)

我也希望解决方案适用于python 2.7和3.6

2 个答案:

答案 0 :(得分:3)

filter没有在Python3.x中返回列表。你应该使用列表理解

[x['age'] for x in people if x['name'] == "Tom" and x['att'] == 12]

除此之外:搜索并不是特别有效,但这取决于您选择的数据结构。如果你做了很多查找,这很重要,因为dict的大小也会变大。您应该使用不同的数据结构或维护辅助数据结构。这与数据库中的指标使用情况类似。

答案 1 :(得分:1)

这是对你发布的内容的简单改编:

filter(lambda person: person['name'] == 'Tom' and person['att'] == 12, people)

另一个帖子的时间可能与两个条件相同(虽然我怀疑它会改变哪个最快),所以如果你真的担心速度你可以重做时间。

相关问题