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 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)
因为这可以用一个相当基本的列表理解来处理,我猜是“Python化”的方式来解决他的问题,反对明确写一个循环。 – Aaron
@Aaron我怀疑只是打印出名字是目标。如果我们假设此时需要更复杂的逻辑,则列表理解可能无用。 (OP似乎不懂如何使用字典,所以我认为这是解释列表理解的糟糕时间。) – theJollySin