取嵌套字典嵌套值的和

2024-10-01 13:39:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本嵌套词典

 dict_features =  {'agitacia/6.txt': {'samoprezentacia': 0, 'oskorblenie': 1},
                   'agitacia/21.txt': {'samoprezentacia': 0, 'oskorblenie': 0}}

我试图输出一个新的字典features_agit_sum,它由前一个字典的一个键和一个“更深”字典的值的总和组成。所以我需要求和0+1,这是int类型。输出应为:

^{pr2}$

下面是几种不同错误的尝试;不要正确迭代:

features_agit_sum = {}
def vector_agit_sum(dict_features):
    for key, value in dict_features:
        features_agit_sum[key] = sum(dict_features.items()[key])
        print (features_agit_sum)
    return features_agit_sum

ValueError: too many values to unpack (expected 2) dict_features.items()[key] - try to access deeper dict

features_agit_sum = {}
def vector_agit_sum(dict_features):
    for key in dict_features:
        for item, value in dict_features.items():
            features_agit_sum[key] = sum([item])
            print (features_agit_sum)
    return features_agit_sum

TypeError: unsupported operand type(s) for +: 'int' and 'str' - Why, it's integers!

features_agit_sum = {}
def vector_agit_sum(dict_features):
    files = dict_features.keys()
    for key, value in dict_features.items():
        features_agit_sum[files] = sum(dict_features.items()[key])
        print (features_agit_sum)
    return features_agit_sum

TypeError: 'dict_items' object is not subscriptable


Tags: keyinforreturn字典valuedefitems
3条回答

尝试一下,使用字典理解(这在python2.7+和3.x中都适用):

{ k : sum(v.values()) for k, v in dict_features.items() }

如果使用Python 2.7+,建议显式使用迭代器,在Python 3.x中,前面的代码片段已经使用了迭代器:

^{pr2}$

无论哪种方式,它都会返回预期结果:

{'agitacia/21.txt': 0, 'agitacia/6.txt': 1}

使用isinstance检查类型并采取正确的操作。如果是int,则将其添加到运行总数中。否则,递归以获得该字典中包含的总和。在

dict_features =  {'agitacia/6.txt': {'samoprezentacia': 0, 'oskorblenie': 1}, 'agitacia/21.txt': {'samoprezentacia': 0, 'oskorblenie': 0}}

def countDict(d):
    total = 0
    for i in d.itervalues():
        if isinstance(i,int):
            total += i
        else:
            total += countDict(i)
    return total



result = {}
for k,v in dict_features.iteritems():

    result[k] = countDict(v)

print result

使用听写理解:

{key: sum(value.itervalues()) for key, value in dict_features.iteritems()}

如果您使用的是python3,请删除iter前缀,因此使用.values()和{}。在

演示:

^{pr2}$

相关问题 更多 >