提问人:noydb 提问时间:6/30/2018 最后编辑:jppnoydb 更新时间:6/30/2018 访问量:8523
计算 Python 字典的特定键中的值数
counting the number of values in a specific key for a python dictionary
问:
有人可以向我解释这一点,和/或指导我以正确的/pythonic 方式做到这一点吗?
蟒蛇 2.7。
最终,我正在尝试遍历字典 countsD:
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
在刚才为这篇文章输入标题时,我被提到了计算字典中每个键的值数以获得答案。太好了,一行!但同样,对于只有一个值的键,它会失败。这个好:
>>> 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()
那么,是什么给了??我觉得我错过了一些愚蠢的东西......
感谢您的帮助!
答:
2赞
R Balasubramanian
6/30/2018
#1
发生这种情况是因为当您保存一个值(例如只有一个值)时,它只是保存为一个,不再是元组,这意味着它没有函数。您可以只添加对值的检查,例如:cc
int
len()
type
if type(d[key]) == int:
print(1)
else:
print(len(d[key]))
这样,您就不会尝试访问 的 length 属性,也不会收到错误。int
评论
0赞
noydb
6/30/2018
谢谢你的帮助!!但我必须说,这似乎很奇怪,你不能为一个项目获得 1 的长度,但你可以为任何项目获得零的长度/计数......在元组中。我不是这方面的专家,所以我还不能理解:-D
0赞
noydb
6/30/2018
那么,您将如何使用 'new_countsD = {k: len(v) for k,v in d.items()}' 对 int 与元组实施此测试???
4赞
blhsing
6/30/2018
#2
在 python 中,单项元组(称为单例)被写成 ,因此输入中的 应该写成 as;否则,它将被视为 的整数。(value,)
(111)
(111,)
111
从元组
的文档中:
一个特殊问题是构造包含 0 或 1 的元组 项目:语法有一些额外的怪癖来适应这些怪癖。空 元组由一对空括号构成;一个元组 一个项目是通过在带逗号的值后面构造的(它不是 足以将单个值括在括号中)。丑陋,但 有效。
>>> empty = () >>> singleton = 'hello', # <-- note trailing comma >>> len(empty) 0 >>> len(singleton) 1 >>> singleton ('hello',)
评论
0赞
blhsing
6/30/2018
很高兴能帮上忙。如果您认为这个问题是正确的,您可以将其标记为已回答吗?
评论