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)
您还可以使用filter带bool:
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)
您需要申请list过filter像这样print(key, len(list(filter(bool, value))))在Python 3.