Python计算dict值中的项目是列表

Rol*_*Bly 11 python dictionary list count python-3.3

Python 3.3,这种形式的键值对字典.

d = {'T1': ['eggs', 'bacon', 'sausage']}
Run Code Online (Sandbox Code Playgroud)

值是可变长度的列表,我需要迭代列表项.这有效:

count = 0
for l in d.values():
   for i in l: count += 1
Run Code Online (Sandbox Code Playgroud)

但它很难看.必须有更多的Pythonic方式,但我似乎无法找到它.

len(d.values()) 
Run Code Online (Sandbox Code Playgroud)

产生1.它是1个列表(DUH).从这里尝试使用计数器会产生"不可用类型"错误.

Mar*_*ers 38

使用sum()和每个字典值的长度:

count = sum(len(v) for v in d.itervalues())
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Python 3,那么就使用d.values().

使用您的输入样本和我的一个快速演示:

>>> d = {'T1': ['eggs', 'bacon', 'sausage']}
>>> sum(len(v) for v in d.itervalues())
3
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']}
>>> sum(len(v) for v in d.itervalues())
7
Run Code Online (Sandbox Code Playgroud)

A Counter在这里对你没有多大帮助,你没有为每个条目创建一个计数,而是计算所有值的总长度.


Joh*_*ooy 9

>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']}
>>> sum(map(len, d.values()))
7
Run Code Online (Sandbox Code Playgroud)