【问题标题】:Python - Merging 2 lists to a dictionaryPython - 将 2 个列表合并到字典中
【发布时间】:2017-11-06 05:32:53
【问题描述】:

例如

a = [a,b,c,d,a,b,c,d]
b = [1,2,3,4,5,6,7,8]

输出应该是一个字典,如下所示:

{'a':6, 'b':8, 'c':10, 'd':12}

我尝试使用 zip,但它只是覆盖了值。

【问题讨论】:

  • 如何定义“合并两个列表”?
  • 入字典
  • 您似乎想在b 中添加与a 中相同的字母键对应的整数。您需要在问题中明确说明。

标签: python list dictionary merge


【解决方案1】:

我相信你想要这个:

from collections import defaultdict

a = list("abcdabcd")
b = [1,2,3,4,5,6,7,8]

d = defaultdict(int)
for key, val in zip(a,b):
    d[key] += val

【讨论】:

    【解决方案2】:

    您似乎希望将相应数字的总和作为您的值。

    我建议使用collections.defaultdict 来管理您的唯一键,并自己实现求和:

    import collections
    
    a, b, c, d = "abcd"
    a = [a, b, c, d, a, b, c, d]
    b = [1, 2, 3, 4, 5, 6, 7, 8]
    
    result = collections.defaultdict(int)
    
    for k,v in zip(a,b):
        result[k] += v
    

    当您查找字典中尚不存在的键时,defaultdict(int) 将创建一个没有初始值的整数(默认为“0”)。所以你会得到 0 + value + value ... 对于每个键,这似乎是你正在寻找的。​​p>

    【讨论】:

    • 它在 OP 的代码中。我假设他已经定义了它们。
    【解决方案3】:

    如果你想尝试不使用默认字典,这里是食谱:

    a = "abcdabcd"
    b = [1,2,3,4,5,6,7,8]
    
    no_dublicate={}
    for item in zip(list(a),b):
        if item[0] not in no_dublicate:
            no_dublicate[item[0]]=[item[1]]
        else:
            for key,value in no_dublicate.items():
                if value==no_dublicate[item[0]]:
                    no_dublicate[item[0]]=item[1]+int("".join(str(x) for x in value))
    
    print(no_dublicate)
    

    输出:

    {'d': 12, 'c': 10, 'a': 6, 'b': 8}
    

    【讨论】:

      猜你喜欢
      • 2022-11-14
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 2022-07-06
      • 2011-03-30
      • 1970-01-01
      相关资源
      最近更新 更多