jgu*_*rra 24 python dictionary
第一个问题,所以我会正确的:
使用python 2.7
我有一个项目字典,键是一个x,y坐标,表示为元组:(x,y),所有值都是布尔值.
我试图找出一种快速而简洁的方法来计算有多少项具有给定值.我不需要知道哪些键具有给定值,只需要知道多少.
这里有一个类似的帖子: 字典中有多少项在Python中共享相同的值,但是我不需要返回字典,只需要一个整数.
我的第一个想法是迭代项目并测试每个项目,同时保持每个True值的计数.我只是想知道,因为我仍然是python的新手并且不了解所有的库,如果有更好/更快/更简单的方法来做到这一点.
提前致谢.
mgi*_*son 33
第一部分主要是为了好玩 - 我可能不会在我的代码中使用它.
sum(d.values())
Run Code Online (Sandbox Code Playgroud)
将获得True值的数量.(当然,您可以获得False值的数量len(d) - sum(d.values())).
稍微更普遍的是,您可以执行以下操作:
sum(1 for x in d.values() if some_condition(x))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,if x可以正常工作,if some_condition(x)并且是大多数人在现实世界的代码中使用的)
我在这里发布的三个解决方案,上面是最具特色的,也是我推荐的一个解决方案
最后,我想这可以写得更聪明一点:
sum( x == chosen_value for x in d.values() )
Run Code Online (Sandbox Code Playgroud)
这与我的第一个(有趣)解决方案一脉相承,因为它依赖于这一事实True + True == 2.聪明并不总是更好.我想大多数人会认为这个版本比上面的版本更加模糊(因此更糟).
Roc*_*key 10
如果你想要一个可以快速访问的数据结构来检查计数,你可以尝试使用一个计数器(正如@mgilson指出的那样,这取决于值本身是可以清除的):
>>> from collections import Counter
>>> d = {(1, 2): 2, (3, 1): 2, (4, 4): 1, (5, 6): 4}
>>> Counter(d.values())
Counter({2: 2, 1: 1, 4: 1})
Run Code Online (Sandbox Code Playgroud)
然后,您可以插入一个值并获取它出现的次数:
>>> c = Counter(d.values())
>>> c[2]
2
>>> c[4]
1
Run Code Online (Sandbox Code Playgroud)