【发布时间】:2018-12-09 00:26:07
【问题描述】:
有人可以向我解释这一点,和/或指导我以正确/pythonic 的方式执行此操作吗?
Python 2.7。
最终,我正在尝试遍历字典计数D:
countsD = {"aa": None, "bb": None, "cc": None, "dd": None}
对于对应字典d中的匹配:
d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (45, 98), "dd": (1, 33)}
将项目的计数作为值添加到相应的匹配键中,最终创建这个countsD
{"aa": 6, "bb": 3, "cc": 2, "dd": 2}
如果我用上面的方法这样做
> d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (45, 98), "dd": (1, 33)}
> for key in d:
>> print(key)
>> print(len(d[key]))
返回的是这个,这是我想要的
aa
6
cc
2
dd
2
bb
3
但是,如果某个键的值之一仅包含 1 个值(完全可能),例如(参见“cc”):
d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (45), "dd": (1, 33)}
然后运行相同的for循环,我在“cc”键上收到错误:
aa
6
cc
Traceback (most recent call last):
File "<interactive input>", line 3, in <module>
TypeError: object of type 'int' has no len()
但是,如果我让那个“cc”键有一个空值 (),那么一切都很好。
d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (), "dd": (1, 33)}
>>> d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (), "dd": (1, 33)}
>>> for key in d:
... print(key)
... print(len(d[key]))
...
aa
6
cc
0
dd
2
bb
3
刚才在输入这篇文章的标题时,我被转介给Count number of values in dictionary for each key 寻求答案。太好了,一条线!但同样,对于只有一个值的键,它会失败。这个好:
>>> d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (), "dd": (1, 33)}
>>> new_countsD = {k: len(v) for k,v in d.items()}
>>> new_countsD
{'aa': 6, 'bb': 3, 'cc': 0, 'dd': 2}
这不是,见键“cc”
>>> d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (111), "dd": (1, 33)}
>>> new_countsD = {k: len(v) for k,v in d.items()}
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "<interactive input>", line 1, in <dictcomp>
TypeError: object of type 'int' has no len()
那么,什么给了?我觉得我错过了一些愚蠢的东西......
感谢您的帮助!
【问题讨论】:
-
是的。有时,尤其是当您对此不熟悉时,您只是不完全知道要搜索什么来弄清楚自己。最终,我不知道我在这里处理的是一个元组。但是,所有这些回复对我来说都是有帮助的,很好的学习。
标签: python python-2.7 dictionary count tuples