基本上,我正在尝试从一个词典中提取值,并在另一本词典中更新值。我有四个列表,如下所示:
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'
。我很失落,所有
我想做的是使用一本字典中的值,然后使用这些值来查找键(即值
从另一张表中),然后获得那些对应的值。
答案 0 :(得分:0)
您将在开头创建一个列表字典:
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: []}
当然,有多种实现方法,最快的还是dict_comprehension和sum
output_sum = {k: sum(v) for k,v in output.items()}