【问题标题】:How replace keys of a dictionary with keys of another dictionary?如何用另一个字典的键替换字典的键?
【发布时间】:2020-03-31 17:07:48
【问题描述】:

我有两个字典 dict1 和 dict2。我想用 dict2 的键替换 dict1 的键。 dict1.keys() 如下:

dict_keys(['8014.png54523', '7595.png37735', '6659.png50805', '8058.png26143','05324.png31372'])

dict2.keys()如下:

dict_keys(['8014.png671302', '7595.png567733', '6659.png681968', '8058.png442154', '05324.png530138'])

我想要 dict2.keys() 作为 dict1.keys。谁能帮我吗。

谢谢!

【问题讨论】:

  • 你将如何分配这些值?替换背后的逻辑是什么?
  • 我已经分配了值。逻辑是比较dict1的key和dict2,如果不相等,用dict1.keys替换dict2.keys。
  • 如果不等于什么?例如,“8014.png54523”会有什么新变化?
  • 解释替换算法 else : dict(zip(d2.keys(),d1.values()))
  • 你不能只是 zip 键和值,字典是无序设计的。所以,首先你应该订购字典。你应该有索引。而且,如果你有索引,似乎你应该有一个包含 3 列的表:index、dict_key、dict_value。

标签: python dictionary


【解决方案1】:

代码

new_dict = {k2:dict1[k1] for k1, k2 in zip(dict1.keys(), dict2.keys())}

测试

键和虚拟值

keys1 = ['8014.png54523', '7595.png37735', '6659.png50805', '8058.png26143','05324.png31372']
vals1 = list(range(len(keys1)))
keys2 = ['8014.png671302', '7595.png567733', '6659.png681968', '8058.png442154', '05324.png530138']
vals2 = list(range(len(keys1)))

字典

dict1 = dict(zip(keys1, vals1))
dict2 = dict(zip(keys2, vals2))

新词典

# Have each k1, v1 in dict1
# and       k2, v2 from dict2
# new dict uses k2:v1
# where v1 = dict1[k1]
new_dict = {k2:dict1[k1] for k1, k2 in zip(dict1.keys(), dict2.keys())}

print(new_dict)

输出

{'8014.png671302': 0, '7595.png567733': 1, '6659.png681968': 2, '8058.png442154': 3, '05324.png530138': 4}

【讨论】:

    【解决方案2】:

    你可以试试这个:

    new_dict1 = {new_key: dict1[old_key] for old_key, new_key in zip(dict1.keys(), dict2.keys())}
    

    【讨论】:

      最近更新 更多