我有一个带有一定数量键的主要词典e.i。
dict1 = {NAME: John, Second_Name: Doe}
我有一系列的这些词汇,所有这些都在列表中。 有没有办法循环遍历此列表并创建一个包含字典的列表,例如,只有关键的NAME和相应的值?有这么简单的方法吗?
PS:我使用dict1作为例子,因为在我的程序中,我正在使用带有更多键的dicts。
答案 0 :(得分:1)
我使用列表理解:
list_of_dicts = [
{'NAME': 'John', 'Second_Name': 'Doe'},
{'NAME': 'Tim', 'Second_Name': 'Doh'},
{'NAME': 'Mark', 'Second_Name': 'Dough'},
]
names_only = [{'NAME': d['NAME']} for d in list_of_dicts]
答案 1 :(得分:0)
您可以使用list comprehension:
[{'NAME': d['NAME']} for d in dictionaries]
如果找不到KeyError
,则会引发NAME
。您可以使用默认值,如下所示:
[{'NAME': d.get('NAME', 'unknown')} for d in dictionaries]
对于d
中的每个词典dictionaries
,它会创建一个包含单个键NAME
的词典,其值为d['NAME']
。
答案 2 :(得分:0)
完全公开:我真的不知道自己在做什么。
扩展@ForeverWintr的答案,以允许复制不一定存在的键,我认为OP在评论中要求这样做:
list_of_dicts = [
{'NAME': 'John', 'Second_Name': 'Doe'},
{'NAME': 'Tim', 'Second_Name': 'Doh'},
{'NAME': 'Mark', 'Second_Name': 'Dough', 'SECRET_HANDSHAKE': True},
]
filter = ['NAME', 'SECRET_HANDSHAKE']
names_only = [{
k: v
for k, v in d.items()
if k in filter
} for d in list_of_dicts
]
我不知道该k in filter
是否有效。也许有更好的方法。似乎您想将filter
预煮成搜索效率更高的结构。也许是另一个命令?