我有两个词典列表.
foo = [{'Tom': 8.2},{'Bob': 16.7},{'Mike': 11.6}]
bar = [{'Tom': 4.2},{'Bob': 6.7},{'Mike': 10.2}]
应该在foo中更新a和b的减法:
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’对象不可迭代.哪里是我的错?
最佳答案
你非常接近.问题是你在词典理解中的列表理解. mydict [k],mydictcorr [k]都返回浮点数,但你试图迭代它们[x-y代表x,y代表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,v in base_dict.items()} for base_dict,subtract)]
话虽如此,当您减去浮点数时,您仍可能会看到一些奇怪的结果.例如,{‘Tom’:3.999999999999999}.您可能希望在对round的调用中包装v-sub_dict.get(k,0).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。