我有一个dicts列表形式的数据,带有一些键和值(下面的示例是两个键/值,可能有更多):
我想热情地回答这个问题:什么是john
的{{1}}?
我现在使用的简单解决方案是迭代列表并检查名称的匹配值。是否有更多的pythonic方法来实现相同的目标?
age
答案 0 :(得分:1)
我会使用next()
和生成器表达式。
生成器表达式将是与for循环等效的一行,next()
将从中获取下一个值(在第一次调用时是第一个值)。
示例 -
next((d['age'] for d in data if d['name'].lower() == 'john'), -1)
-1
的第二个参数就像返回的默认值,以防生成器表达式不再具有值(在这种情况下 - 表示name
- john
列表中不存在。)
演示 -
>>> data = [
... {
... 'name': 'john',
... 'age': 10
... },
... {
... 'name': 'paul',
... 'age': 20
... }
... ]
>>>
>>> next((d['age'] for d in data if d['name'].lower() == 'john'), None)
10
答案 1 :(得分:0)
您可以创建一个名称为key且age为value的字典,然后查找名称:
age = {person['name']: person['age']
for person in data}['john']
答案 2 :(得分:0)
也许你想要的是理解列表
age = [d['age'] for d in data if d['name'] == 'john'][0]
此外,您可以通过以下方式在列表中使用过滤器:
age = filter(lambda u : u['name'] == 'john', data)[0]['age']
答案 3 :(得分:0)
如果你需要对多个名称进行查找,那么生成一个名字作为键的dict是明智的 -
new_dict = {datum['name']: data for datum in data}
new_dict['john']['age']
通过这种方式,您可以轻松访问它,并且看起来更加pythonic。但是,如果您的数据集太大而无法成为问题,那么它可能不是性能最佳的解决方案。