Python - 在if语句之后的字典列表中获取字典元素

问题描述:

如何根据满足某些条件的字典在字典列表中获取字典值?例如,如果在列表中的词典中的一个具有ID = 5,我想打印对应于字典的name键的值:Python - 在if语句之后的字典列表中获取字典元素

list = [{'name': 'Mike', 'id': 1}, {'name': 'Ellen', 'id': 5}] 
id = 5 
if any(m['id'] == id for m in list): 
    print m['name'] 

因为m不被外部定义这将无法正常工作if语句。

你有字典的列表,所以你可以使用列表理解:

[d for d in lst if d['id'] == 5] 

# [{'id': 5, 'name': 'Ellen'}] 

new_list = [m['name'] for m in list if m['id']==5] 
print '\n'.join(new_list) 

这将是很容易与单一for循环来完成:

for d in list: 
    if 'id' in d and d['in'] == 5: 
     print(d['name']) 

这里有两个关键的概念要学习。首先是我们使用for loop“遍历列表中的每个元素”。第二,是我们用in这个词来检查一个字典是否有某个关键字。

+0

因为这可以用一个相当基本的列表理解来处理,我猜是“Python化”的方式来解决他的问题,反对明确写一个循环。 – Aaron

+0

@Aaron我怀疑只是打印出名字是目标。如果我们假设此时需要更复杂的逻辑,则列表理解可能无用。 (OP似乎不懂如何使用字典,所以我认为这是解释列表理解的糟糕时间。) – theJollySin

以下情况如何?

for entry in list: 
    if entry['id']==5: 
     print entry['name'] 

它不会在Python2存在,但在Python3一个简单的解决办法是使用ChainMap代替list

import collections 

d = collections.ChainMap(*[{'name':'Mike', 'id': 1}, {'name':'Ellen', 'id': 5}]) 
if 'id' in d: 
    print(d['id']) 

您可以使用过滤功能做到这一点:

lis = [ {'name': 'Mike', 'id': 1}, {'name':'Ellen', 'id': 5}] 
result = filter(lambda dic:dic['id']==5,lis)[0]['name'] 
print(result)