繁体   English   中英

如何在Python中将有序字典的键更改为其他有序字典的键?

[英]How to change keys of ordered dict to that of keys from other ordered dict in Python?

我有两个命令字典D1D2 我想的键名分配D2D1 (覆盖现有的键名D1 )。 怎么做?

例:

D1 = {'first_key': 10, 'second_key': 20}
D2 = {'first_new_key': 123, 'second_new_key': 456}

现在我想将D2键名分配给D1以便D1成为

{'first_new_key': 10, 'second_new_key': 20}

这是一个解决方案:

keys = D2.keys()
values = D1.values()
new_dict = dict(zip(keys, values))

如果您喜欢1-liners(这就是为什么我们有python,对吗?):

new_dict = dict(zip(D2.keys(), D1.values()))

如评论中所述,两个字典之间的插入顺序必须匹配。

编辑

我发现您想覆盖D1 在这种情况下,您可以简单地执行以下操作:

D1 = dict(zip(D2.keys(), D1.values()))

编辑2

正如Barmar在另一个答案中提到的那样,为了拥有有序字典,必须使用collections.OrderedDict()

如果可以创建新词典,则noamgot的答案将起作用。 如果您需要修改现有字典,请执行以下操作:

for (old_key, old_val), new_key in zip(list(D1.items()), D2.keys()):
    del D1[old_key]
    D1[new_key] = old_val

Python 3中需要list()包装器,因为items()是生成器,并且您无法修改要迭代的字典。

DEMO

最简单的方法就是单纯的字典分配:

D1 = {'first_key': 10, 'second_key': 20}
D2 = {'first_new_key': 123, 'second_new_key': 456}
D2['first_new_key'] = D1['first_key']
D2['second_new_key'] = D1['second_key']

但是,对于较大的词典,使用字典理解可能会更好:

D1 = {a:D1[a.split('_')[0]+"_key"] for a, _ in D2.items()}

输出:

{'second_new_key': 20, 'first_new_key': 10}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM