将两个列表(一个具有重复元素,一个具有整数)合并到字典中
Merging two lists, one with duplicate elements and one with integers, into dict
所以我有两个列表,它们是根据一些参数通过抓取 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}
我一直在摆弄 zip
、zip_longest
、map
,但我发现这些都行不通。关于如何获取 JSON 数据,我已经到了要回到绘图板的地步,但是如果有人有一段简洁的代码那会很棒。
您可以使用 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
您可以为此使用 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
所以我有两个列表,它们是根据一些参数通过抓取 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}
我一直在摆弄 zip
、zip_longest
、map
,但我发现这些都行不通。关于如何获取 JSON 数据,我已经到了要回到绘图板的地步,但是如果有人有一段简洁的代码那会很棒。
您可以使用 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
您可以为此使用 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