将密钥和相应的值从一个字典转移到另一个字典

时间:2016-04-24 15:31:07

标签: python list dictionary key

我有一个带有一定数量键的主要词典e.i。

dict1 = {NAME: John, Second_Name: Doe}

我有一系列的这些词汇,所有这些都在列表中。 有没有办法循环遍历此列表并创建一个包含字典的列表,例如,只有关键的NAME和相应的值?有这么简单的方法吗?

PS:我使用dict1作为例子,因为在我的程序中,我正在使用带有更多键的dicts。

3 个答案:

答案 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预煮成搜索效率更高的结构。也许是另一个命令?