如何将有序字典的键更改为 Python 中其他有序字典的键?
How to change keys of ordered dict to that of keys from other ordered dict in Python?
我有两个有序的字典 D1
和 D2
。我想将 D2
的键名分配给 D1
(覆盖 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 线(这就是我们 python 的原因,对吧?):
new_dict = dict(zip(D2.keys(), D1.values()))
如评论中所述,2个词典之间的插入顺序必须匹配。
编辑
我发现你想覆盖 D1
。在那种情况下,你可以简单地做:
D1 = dict(zip(D2.keys(), D1.values()))
编辑 2
正如 Barmar 在另一个答案中提到的,为了订购词典,必须使用 collections.OrderedDict()
。
最简单的方法就是字典赋值:
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}
如果可以创建新词典,noamgot 的答案将有效。如果需要就地修改现有字典:
for (old_key, old_val), new_key in zip(list(D1.items()), D2.keys()):
del D1[old_key]
D1[new_key] = old_val
list()
包装器在 Python 3 中是必需的,因为 items()
是一个生成器,你不能修改被迭代的字典。
我有两个有序的字典 D1
和 D2
。我想将 D2
的键名分配给 D1
(覆盖 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 线(这就是我们 python 的原因,对吧?):
new_dict = dict(zip(D2.keys(), D1.values()))
如评论中所述,2个词典之间的插入顺序必须匹配。
编辑
我发现你想覆盖 D1
。在那种情况下,你可以简单地做:
D1 = dict(zip(D2.keys(), D1.values()))
编辑 2
正如 Barmar 在另一个答案中提到的,为了订购词典,必须使用 collections.OrderedDict()
。
最简单的方法就是字典赋值:
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}
如果可以创建新词典,noamgot 的答案将有效。如果需要就地修改现有字典:
for (old_key, old_val), new_key in zip(list(D1.items()), D2.keys()):
del D1[old_key]
D1[new_key] = old_val
list()
包装器在 Python 3 中是必需的,因为 items()
是一个生成器,你不能修改被迭代的字典。