【发布时间】:2016-10-26 23:08:10
【问题描述】:
我有一个不一定具有相同键的字典列表。我正在尝试为每个具有特定键的字典中包含的值创建一个新列表。
例如
dict1 = {'key1': 1, 'key2': 2, 'key4': 4}
dict2 = {'key2': 2, 'key3': 3}
dict3 = {'key1': 1, 'key2': 2, 'key3': 3}
dict_list = [dict1, dict2, dict3]
现在我正在尝试从 dict_list 创建一个列表,如下所示:
key2vals = [dict['key2'] for dict in dict_list]
print(key2vals)
[2, 2, 2]
效果很好,因为列表中的每个字典都包含“key2”。但是,当我尝试一个没有出现在每个字典中的键时,我会出错。例如。 'key1':
>>> key1vals = [dict['key1'] for dict in dict_list]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <listcomp>
KeyError: 'key1'
有没有一种简单直接的方法可以让我执行以下操作,但这是行不通的?
# This does not work
key1vals = [dict['key1'] if 'key1' in dict for dict in dict_list]
实现这一点的最 Pythonic 方式是什么?
回答: for 和 if 语句的顺序应该颠倒:
key1vals = [dict['key1'] for dict in dict_list if 'key1' in dict ]
此外,根据 AbrahamB 和 DJV 的建议,我能够在没有搜索键的情况下为这些字典添加默认值:
[dict.get('key1', 0) for dict in dict_list]
【问题讨论】:
标签: python dictionary key