首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >计算python字典的特定键中的值的数量

计算python字典的特定键中的值的数量
EN

Stack Overflow用户
提问于 2018-06-30 03:08:03
回答 1查看 6.5K关注 0票数 1

有没有人能给我解释一下,和/或指导我用正确的/蟒蛇式的方式来做这件事?

Python 2.7。

最后,我尝试遍历字典countsD:

代码语言:javascript
复制
countsD = {"aa": None, "bb": None, "cc": None, "dd": None} 

并且对于相应字典d中的匹配:

代码语言:javascript
复制
d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (45, 98), "dd": (1, 33)}

将条目计数作为值添加到相应的匹配键,以最终创建此countsD

代码语言:javascript
复制
{"aa": 6, "bb": 3, "cc": 2, "dd": 2}

如果我用上面的代码这样做

代码语言:javascript
复制
> 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]))

返回的是这个,这就是我想要的

代码语言:javascript
复制
aa
6
cc
2
dd
2
bb
3

但是,如果某个key的某个值只包含1个值(完全有可能),如(参见"cc"):

代码语言:javascript
复制
d = {"aa": (5689, 34, 44, 77, 88, 321), "bb": (33, 6742, 89744), "cc": (45), "dd": (1, 33)}

然后运行同样的for循环,我得到了一个关于"cc“键的错误:

代码语言:javascript
复制
aa
6
cc
Traceback (most recent call last):
  File "<interactive input>", line 3, in <module>
TypeError: object of type 'int' has no len()

但是,如果我再次使"cc“键具有空值(),那么一切都会恢复正常。

代码语言:javascript
复制
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寻求答案。很好,只有一行!但同样,对于只有一个值的键,它会失败。这一点很好:

代码语言:javascript
复制
>>> 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“

代码语言:javascript
复制
>>> 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()

那是什么原因??我觉得我错过了一些愚蠢的东西。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-30 03:15:54

之所以会发生这种情况,是因为当您只使用一个值保存像cc这样的值时,它只是保存为一个int,而不再是一个元组,这意味着它没有len()函数。您可以只添加对值的type的检查,例如:

代码语言:javascript
复制
if type(d[key]) == int:
    print(1)
else:
    print(len(d[key]))

这样,您就不会尝试访问int的length属性,也不会得到错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51107992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档