【问题标题】:Merging two lists, one with duplicate elements and one with integers, into dict [duplicate]将两个列表(一个包含重复元素,一个包含整数)合并到 dict [重复]
【发布时间】:2019-09-23 21:36:49
【问题描述】:

所以我有两个列表,它们是通过基于几个参数抓取 JSON 数据创建的,例如:

list_1 = ['red', 'green', 'blue', 'yellow', 'red', 'blue', 'pink')
list_2 = [0.1, 0.1, 0.7, 0.4, 0.5, 0.6, 1.5]

在 JSON 数据中,键 'red' 在一个嵌套数组中具有值 0.1,在另一个嵌套数组中具有 0.5。这些列表是按顺序排列的,所以list_1[0] 对应于list_2[0]list_1[1] 对应于list_2[1] 等...

我的目标是最终得到一个字典,其中包含来自list_1 的独特元素和来自list_2组合值。例如:

dict_1 = {'red': 0.6, 'green': 0.1, 'blue': 1.3, 'yellow': 0.4, 'pink': 1.5}

我一直在搞乱zipzip_longestmap,但我发现这些都行不通。关于如何获取 JSON 数据,我已经到了要回到绘图板上的地步,但是如果有人有一个整洁的 sn-p 代码,那就太棒了。

【问题讨论】:

  • 与 dupe 中的想法基本相同,只是压缩成对。

标签: python list dictionary merge add


【解决方案1】:

您可以使用zip() 生成对并对其进行迭代:

list_1 = ['red', 'green', 'blue', 'yellow', 'red', 'blue', 'pink']
list_2 = [0.1, 0.1, 0.7, 0.4, 0.5, 0.6, 1.5]

res = {}
for key, value in zip(list_1, list_2):
    if key in res:
        res[key] += value
    else:
        res[key] = value

【讨论】:

  • 这不起作用,因为红色的值将是 0.5 而不是 0.6,因为字典不允许多个键,它被覆盖了。
  • @T.BJ,检查帖子编辑
【解决方案2】:

您可以为此使用defaultdict

list_1 = ['red', 'green', 'blue', 'yellow', 'red', 'blue', 'pink']
list_2 = [0.1, 0.1, 0.7, 0.4, 0.5, 0.6, 1.5]

from collections import defaultdict

res = defaultdict(float)

for k, v in zip(list_1, list_2):
    res[k] += v

【讨论】:

  • 即使有效,传递float作为默认类型也是正确的。
  • @OlvinR​​oght 错过了,谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-06-29
  • 2013-12-15
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 2020-10-20
  • 2013-02-14
  • 1970-01-01
相关资源
最近更新 更多