31

在 Python 中从另一个创建dict具有某些属性的 的最佳方法是什么?dict

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

dict1 = {
    name:          'Jaime',
    last_name:     'Rivera',
    phone_number:  '111111',
    email:         'test@gmail.com',
    password :     'xxxxxxx',
    token:         'xxxxxxx',
    secret_stuff:  'yyyyyyy'   
}

我想获得

dict2 = {
    name:          'Jaime',
    last_name:     'Rivera',
    phone_number:  '111111',
    email:         'test@gmail.com'
}
4

7 回答 7

72

例如:

keys = ['name', 'last_name', 'phone_number', 'email']
dict2 = {x:dict1[x] for x in keys}
于 2012-08-24T21:48:59.803 回答
25

使用 dict 理解:

required_fields = ['name', 'last_name', 'phone_number', 'email']
dict2 = {key:value for key, value in dict1.items() if key in required_fields}
于 2012-08-24T21:49:21.490 回答
9
for key in d1:
    if key in wanted_keys:
        d2[key] = d1[key]

更新

我最近发现有一种更简洁的方法可以通过dict理解来做到这一点

wanted_keys = set(['this_key', 'that_key'])
new_dict = {k: d1[k] for k in d1.keys() & wanted_keys}
于 2012-08-24T21:49:13.783 回答
8

对于任何想要 dict1 的完整副本而不制作键列表的人:

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

于 2019-01-05T16:05:23.540 回答
4

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

您可以使用双星号来解构一个字典,而巧合的是,它也可以在另一个字典中工作。

someweirddata = {"hello":"world"}
print({"initial data":"yati yati yata",**someweirddata})

输出:

{'initial data': 'yati yati yata', 'hello': 'world'}

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

于 2021-02-11T20:00:13.297 回答
2
def removekey(mydict, key):
    r = dict(mydict)
    del r[key]
    return r

传递 mydict 字典和要删除的键,返回剩余字典

于 2012-08-24T21:49:19.397 回答
0

someweirddata = {"hello":"world"} print({"初始数据":"yati yati yata",**someweirddata})

输出:

{'initial data': 'yati yati yata', 'hello': 'world'}

但是,如果您有 2 深度字典并且它们具有相同的键,则该函数会返回错误的输出而没有错误!

someweirddata = {"hello":{"world":[0,0,0]}} print({"hello":{"world":[1,1,1]},**someweirddata})

输出:

{'hello': {'world': [0, 0, 0]}}
于 2021-12-08T04:53:28.150 回答