计算一个密钥和一个python(3.2)字典的多少值

use*_*024 3 python dictionary list missing-data python-3.x

我确信这很愚蠢,但我根本无法绕过它.我有一个像这样的字典,每个键的值不等:

'John greased ': ['axle', 'wheel', 'wheels', 'wheel', 'engine', ''], 
'Paul alleged ': ['truth', 'crime', 'facts', 'infidelity', 'incident', ''], 
'Tracy freed ': ['animals', 'fish', 'slaves', 'slaves', 'slaves', 'pizza'], 
'Lisa plowed ': ['field', 'field', '', '', '', ''],
Run Code Online (Sandbox Code Playgroud)

我想知道每个键有多少值,而不是每个唯一值,但每个键有多少个标记,重复或不重复.所以我会得到一个结果:

John greased  5
Paul alleged  5
Tracy freed  6
Lisa plowed  2
Run Code Online (Sandbox Code Playgroud)

我试图使用它来使用下面的代码来解决它:

for key, value in sorted(result.items()):
         print(key, len(value)) 
Run Code Online (Sandbox Code Playgroud)

但由于缺失值,所有长度都变得相同.关于如何解决这个或在哪里找到它的任何想法?非常感谢您的帮助.

Gam*_*iac 12

解决这个问题的一种方法是改变你的最后一行:

print(key, len([item for item in value if item])) 
Run Code Online (Sandbox Code Playgroud)

那么你的完整代码:

ITEMS = {
    'John greased ': ['axle', 'wheel', 'wheels', 'wheel', 'engine', ''],
    'Paul alleged ': ['truth', 'crime', 'facts', 'infidelity', 'incident', ''],
    'Tracy freed ': ['animals', 'fish', 'slaves', 'slaves', 'slaves', 'pizza'],
    'Lisa plowed ': ['field', 'field', '', '', '', ''],
}

for key, value in ITEMS.items():
    #print value
    print(key, len([item for item in value if item]))
Run Code Online (Sandbox Code Playgroud)

您还可以使用filterbool:

print(key, len(filter(bool, value)))
Run Code Online (Sandbox Code Playgroud)

所以,循环:

for key, value in ITEMS.items():
    #print value
    print(key, len(filter(bool, value)))
Run Code Online (Sandbox Code Playgroud)

您需要申请listfilter像这样print(key, len(list(filter(bool, value))))在Python 3.