gpt4 book ai didi

python - 从另一个字典列表中减去字典列表中的值

转载 作者:太空狗 更新时间:2023-10-30 01:21:11 27 4
gpt4 key购买 nike

我有两个字典列表。

foo = [{'Tom': 8.2}, {'Bob': 16.7}, {'Mike': 11.6}]
bar = [{'Tom': 4.2}, {'Bob': 6.7}, {'Mike': 10.2}]

a 和 b 的减法应该在 foo 中更新:

foo = [{'Tom': 4.0}, {'Bob': 10.0}, {'Mike': 1.4}]

现在我尝试使用两个循环和 zip 函数:

def sub(a,b):       
for mydict,mydictcorr in zip(a,b):
{k:[x-y for x, y in mydict[k], mydictcorr[k]] for k in mydict}
return mydict
print sub(foo,bar)

我收到一个 TypeError: 'float' object is not iterable。我的错误在哪里?

最佳答案

你们很亲密。问题是您在字典理解中的列表理解。 mydict[k], mydictcorr[k] 都返回 float ,但你试图迭代它们 [x-y for x, y in mydict[k], mydictcorr[k]].

这对你有用:

def sub(base, subtract):
corrected = []
for base_dict, sub_dict in zip(base, subtract):
corrected.append({k: v - sub_dict.get(k, 0) for k, v in base_dict.items()})
return corrected

或者作为一种可读性更差的单行代码(因为我想看看我是否可以):

def sub(base, subtract):
return [{k: v - sub_dict.get(k, 0) for k, v in base_dict.items()} for base_dict, sub_dict in zip(base, subtract)]

话虽如此,当你减去 float 时,你可能仍然会看到一些奇怪的结果。例如,{'Tom': 3.999999999999999}。您可能希望在对舍入的调用中包装 v - sub_dict.get(k, 0)

关于python - 从另一个字典列表中减去字典列表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33284460/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com