python字典中多个值的计数

python字典中多个值的计数,python,dictionary,Python,Dictionary,我有一个字典,每个键都有多个值。 我正在尝试计算值的总数。 例如: key: 1, value: abc, bcd, egf key: 2, value: asj,asfah,afhs,jhsafh 因此,值的总数是3+4=7 什么是pythonic方法来获得这个计数。 谢谢那么: sum(len(val) for val in dictionary.itervalues()) 请注意,这使用生成器而不是创建临时长度列表。如何: sum(len(val) for val in diction

我有一个字典,每个键都有多个值。 我正在尝试计算值的总数。 例如:

key: 1, value: abc, bcd, egf
key: 2, value: asj,asfah,afhs,jhsafh
因此,值的总数是3+4=7 什么是pythonic方法来获得这个计数。 谢谢

那么:

sum(len(val) for val in dictionary.itervalues())
请注意,这使用生成器而不是创建临时长度列表。

如何:

sum(len(val) for val in dictionary.itervalues())

请注意,这使用了一个生成器,而不是创建一个临时长度列表。

您需要遍历字典中的所有键和值,找到每组值的长度

下面使用列表理解来构建所有这些长度的列表,然后取它们的总和:

sum([len(value) for key, value in my_dict.iteritems()]) 

如果您想提高效率,可以按照Cameron的建议,将my_dict.iteritems中的for key、value替换为my_dict.itervalues中的for value和use generator表达式。

您需要迭代字典中的所有键和值,找到每组值的长度

下面使用列表理解来构建所有这些长度的列表,然后取它们的总和:

sum([len(value) for key, value in my_dict.iteritems()]) 
如果您想提高效率,可以按照Cameron的建议,将my_dict.iteritems中的for key、value替换为my_dict.itervalues中的for value和use generator表达式。

如果您确定dict中的每个值都是一个列表,则此操作有效:

sum(len(val) for val in d.itervalues())
如果没有,则需要更加小心,可能还需要更多的信息。例如,字符串也有一个len,表示字符串中的字符数。您可能希望字符串计数为1个条目,而不是与长度成比例的计数。如果是这样,这种可读性较差的版本可以:

sum(1 if isinstance(val, basestring) else len(val) for val in d.itervalues())
如果您确定dict中的每个值都将是一个列表,则此操作有效:

sum(len(val) for val in d.itervalues())
如果没有,则需要更加小心,可能还需要更多的信息。例如,字符串也有一个len,表示字符串中的字符数。您可能希望字符串计数为1个条目,而不是与长度成比例的计数。如果是这样,这种可读性较差的版本可以:

sum(1 if isinstance(val, basestring) else len(val) for val in d.itervalues())

不需要这些键,所以itervalues比iteritems更好,也不需要同时使用所有镜头,所以生成器表达式比列表理解更好。确实如此。我会修改它,但Cameron肯定有一把更快的枪,所以他可以获得荣誉。不需要钥匙,所以itervalues比iteritems更好,也不需要一次使用所有镜头,所以生成器表达式比列表理解更好。肯定是这样。我会修改它,但卡梅隆肯定有一把更快的枪,所以他可以获得荣誉。好问题:对于回答者来说,如果len在某些项目上不起作用会发生什么?@yosukesabai我认为回答者关于值是序列的假设是合理的。iterables的一般解决方案是对value-in-value\u-iterable进行sum1,有几种方法可以检查该项是否可iterable,如果你可以有一个不应该有的异构列表。@agf:谢谢,我经常搞砸,像dct['k']=错误,而不是dct['k']=[正确]。我猜这是一个纪律问题。好问题:对于回答者来说,如果len在某些项目上不起作用,会发生什么?@yosukesabai我认为回答者关于值是序列的假设是合理的。iterables的一般解决方案是对value-in-value\u-iterable进行sum1,有几种方法可以检查该项是否可iterable,如果你可以有一个不应该有的异构列表。@agf:谢谢,我经常搞砸,像dct['k']=错误,而不是dct['k']=[正确]。我想这是一个纪律问题。