【问题标题】:Python Merge dictionaries of same length but different keysPython合并长度相同但键不同的字典
【发布时间】:2021-10-21 07:51:27
【问题描述】:

我有两个长度相同但键不同的字典,如下所示

dict1 = {"integervalue": None, "floatingValue": None, "stringValue": None}
dict2 = {"0": 10, "1": 0.1020, "2": "XXX"}

我需要将第二个字典的值更新为第一个(相同长度的字典)并使用 zip 来实现如下所示

for (k, v) in zip(dict1, dict2):
  dict1[k] = dict2[v]

这完成了工作并产生如下输出

dict1 = {"integervalue": 10, "floatingValue": 0, "stringValue": "XXX"}

或者有没有更好的方法来实现没有 zip ?

【问题讨论】:

  • 无法重现。你的代码给了我一个dict1,比如:{'integervalue': 10, 'floatingValue': 0.102, 'stringValue': 'XXX'}
  • 不,它不会转换任何东西。
  • 哦,是的!它没有转换类型,但有没有最快的方法来做同样的事情?
  • 第一个和第二个字典中的键之间是否有定义的对应关系?即"integervalue" 是否总是与"0" 配对等等?

标签: python dictionary dictionary-comprehension


【解决方案1】:

假设键始终具有与您展示的示例相同的对应关系,我实际上会明确说明而不是依赖插入顺序,这可能会导致问题。比如:

key_translation = {
    "integerValue": "0",
    "floatingValue": "1", 
    "stringValue": "2"
}

dict1 = {"integerValue": None, "floatingValue": None, "stringValue": None}
dict2 = {"0": 10, "1": 0.1020, "2": "XXX"}

for key in dict1:
    dict1[key] = dict2[key_translation[key]]

print(dict1)
# {'integerValue': 10, 'floatingValue': 0.102, 'stringValue': 'XXX'}

【讨论】:

  • 工作正常,但如果它的多层嵌套字典我必须为它们维护 key_translation 字典,对吗?
  • 在我的情况下,字典是动态生成的,无论如何我都无法进行密钥转换映射,这很有帮助
【解决方案2】:

这是实现我认为您追求的目标的一种方法,但它不考虑 dict2 中是否有多个 int、float 或 str 值,它稍微修改了 dict1,它使用第三本词典。

dict1 = {str: 'stringValue', int: 'integerValue', float: 'floatingValue'}
dict2 = {"0": 10, "1": 0.1020, "2": "XXX"}
output = {}

for k, v in dict2.items():
    output.update({
        dict1.get(type(v)): v
    })

输出:{'integerValue': 10, 'floatingValue': 0.102, 'stringValue': 'XXX'}


EDIT 也可以使用for v in dict2.values(),因为我没有使用k 变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2017-12-29
    • 2014-03-09
    • 1970-01-01
    相关资源
    最近更新 更多