从另一个defaultdict获取价值并更新原始字典
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从另一个defaultdict获取价值并更新原始字典相关的知识,希望对你有一定的参考价值。
基本上,我试图从一个字典中提取值并更新另一个字典中的值。我有四个列表如下:
a = [1,1,2,3,4,5]
b = [0,3,0,5,6,0]
c = [2,3,4,5,6,5]
d = [20,30,40,50,60,70]
所以我使用defaultdict存储a,b的键值对,如:
one = defaultdict(list)
for k, v in zip(a, b):
one[k].append(v)
two = defaultdict(list)
for k, v in zip(c, d):
two[k].append(v)
本质上,b链接到c所以我试图提取两个字典中的值,然后更新一个字典中的值
所以最后一个看起来像{1: 30, 3: 50, 4: 60}
这是我的代码:
three = defaultdict(list)
for k, v in one.items():
if v in two.keys():
newvalue = two[v].values()
three[k].append(newvalue)
但我现在在if v in two.keys():
线上遇到unhashable type: 'list'
的错误。我迷失了,我想要做的就是使用一个字典中的值,然后使用这些值来查找键(这是另一个表中的值),然后获取那些相应的值。
答案
您正在开始创建列表字典:
one = defaultdict(list)
for k, v in zip(a, b):
one[k].append(v)
[output] : defaultdict(list, {1: [0, 3], 2: [0], 3: [5], 4: [6], 5: [0]})
two = defaultdict(list)
for k, v in zip(c, d):
two[k].append(v)
[output] : defaultdict(list, {2: [20], 3: [30], 4: [40], 5: [50, 70], 6: [60]})
因此,当在one.items()中调用k,v时,您将获得一个键和一个列表。只需切换到遍历列表,你就应该好好去
three = defaultdict(list)
for k, v in one.items():
for value in v:
if value in two.keys():
newvalue = two[value]
three[k].append(newvalue)
但是我得到了这个输出:
defaultdict(list, {1: [[30]], 3: [[50, 70]], 4: [[60]]})
这对我来说听起来很合理,但这不是你想要的,请你解释一下吗?
让我们尝试用dic理解
output = { k : two[v_2] for k,v in one.items() for v_2 in v}
[output] : {1: [30], 2: [], 3: [50, 70], 4: [60], 5: []}
Request to sum :
当然,多种方式,最快的是dict_comprehension和sum
output_sum = {k: sum(v) for k,v in output.items()}
以上是关于从另一个defaultdict获取价值并更新原始字典的主要内容,如果未能解决你的问题,请参考以下文章
如何从另一个活动中编辑和获取 editText 输入字段的更新?