如何从另一个字典创建字典?

Jai*_*era 16 python dictionary

在Python dict中用另一些属性创建一个属性的最佳方法是什么dict

例如,假设我有以下内容dict:

dict1 = {
    name:          'Jaime',
    last_name:     'Rivera',
    phone_number:  '111111',
    email:         'test@gmail.com',
    password :     'xxxxxxx',
    token:         'xxxxxxx',
    secret_stuff:  'yyyyyyy'   
}
Run Code Online (Sandbox Code Playgroud)

我想获得

dict2 = {
    name:          'Jaime',
    last_name:     'Rivera',
    phone_number:  '111111',
    email:         'test@gmail.com'
}
Run Code Online (Sandbox Code Playgroud)

Lev*_*sky 40

例如:

keys = ['name', 'last_name', 'phone_number', 'email']
dict2 = {x:dict1[x] for x in keys}
Run Code Online (Sandbox Code Playgroud)

  • @JaimeRivera:作为一种防御措施,您可能希望在字典理解表达式的末尾添加`...如果x在dict1`中,以避免在缺少任何键时出现`KeyError`异常. (6认同)
  • 或者,如果您希望在这些情况下交换默认值,则可以在dict上使用`.get()`而不是索引. (4认同)

Ros*_*nko 20

使用dict理解:

required_fields = ['name', 'last_name', 'phone_number', 'email']
dict2 = {key:value for key, value in dict1.items() if key in required_fields}
Run Code Online (Sandbox Code Playgroud)


小智 8

不知道怎么没人回答这个问题。

您可以使用双星号来解构一个字典,而这恰好也适用于另一个字典。

someweirddata = {"hello":"world"}
print({"initial data":"yati yati yata",**someweirddata})
Run Code Online (Sandbox Code Playgroud)

输出:

{'initial data': 'yati yati yata', 'hello': 'world'}
Run Code Online (Sandbox Code Playgroud)

这与 Javascript 的...相同,只不过它是 **


小智 6

对于任何想要完整的 dict1 副本而不需要列出密钥的人:

dict2 = {k: v for k, v in dict1.items()}

  • 这并不能回答问题。 (3认同)

Mat*_*yra 5

for key in d1:
    if key in wanted_keys:
        d2[key] = d1[key]
Run Code Online (Sandbox Code Playgroud)

update

I recently figured out that there's a much cleaner way of doing that with dict comprehensions

wanted_keys = set(['this_key', 'that_key'])
new_dict = {k: d1[k] for k in d1.keys() & wanted_keys}
Run Code Online (Sandbox Code Playgroud)