基于此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 == Tom
和att == 12
获取词典的年龄列表?仅对一个条件执行此操作:
filter(lambda person: person['name'] == 'Tom', people)
我也希望解决方案适用于python 2.7和3.6
答案 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)
另一个帖子的时间可能与两个条件相同(虽然我怀疑它会改变哪个最快),所以如果你真的担心速度你可以重做时间。