加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-05-27 15:07:28 所属栏目:Python 来源:互联网
导读:我有两个词典列表.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}] 现

我有两个词典列表.

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).

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读