问题描述
如何根据满足某些条件的字典在字典列表中获取字典值?
例如,如果列表中的词典之一具有id = 5,我想打印与该词典的name
键相对应的值:
list = [{'name': 'Mike', 'id': 1}, {'name': 'Ellen', 'id': 5}]
id = 5
if any(m['id'] == id for m in list):
print m['name']
这是行不通的,因为没有在if语句之外定义m
。
1楼
您有一个字典列表 ,因此可以使用列表推导:
[d for d in lst if d['id'] == 5]
# [{'id': 5, 'name': 'Ellen'}]
2楼
new_list = [m['name'] for m in list if m['id']==5]
print '\n'.join(new_list)
3楼
使用单个for循环即可轻松完成此操作:
for d in list:
if 'id' in d and d['in'] == 5:
print(d['name'])
这里有两个关键概念需要学习。 首先是我们使用了来“遍历列表的每个元素”。 第二,是我们使用单词来检查字典是否具有特定的键。
4楼
接下来呢?
for entry in list:
if entry['id']==5:
print entry['name']
5楼
它不存在于Python2
,但在一个简单的解决方案Python3
是使用一个ChainMap
代替的list
。
import collections
d = collections.ChainMap(*[{'name':'Mike', 'id': 1}, {'name':'Ellen', 'id': 5}])
if 'id' in d:
print(d['id'])
6楼
您可以使用过滤器功能来做到这一点:
lis = [ {'name': 'Mike', 'id': 1}, {'name':'Ellen', 'id': 5}]
result = filter(lambda dic:dic['id']==5,lis)[0]['name']
print(result)