如何根据同一元素中的另一个值搜索dict列表中元素的值?

时间:2015-08-28 10:15:32

标签: python

我有一个dicts列表形式的数据,带有一些键和值(下面的示例是两个键/值,可能有更多):

我想热情地回答这个问题:什么是john的{​​{1}}?

我现在使用的简单解决方案是迭代列表并检查名称的匹配值。是否有更多的pythonic方法来实现相同的目标?

age

4 个答案:

答案 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。但是,如果您的数据集太大而无法成为问题,那么它可能不是性能最佳的解决方案。