Python中字典中有多少项共享相同的值

5 投票
5 回答
10322 浏览
提问于 2025-04-15 20:05

有没有办法查看在Python中有多少个字典里的项目共享相同的值呢?

假设我有一个这样的字典:

{"a": 600, "b": 75, "c": 75, "d": 90}

我想得到一个这样的结果字典:

{600: 1, 75: 2, 90: 1}

我最初的简单想法是用一个嵌套的for循环,对于每个值再遍历一次字典。有没有更好的方法呢?

5 个回答

1

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这时候,我们需要去查找问题的原因。通常,我们可以通过查看错误信息、调试代码或者在网上搜索相关的解决方案来找到答案。

在StackOverflow这个网站上,有很多程序员分享他们遇到的问题和解决方法。如果你在编程过程中遇到困难,可以去那里看看,可能会找到别人已经解决过的类似问题。

记得在提问的时候,要尽量描述清楚你遇到的问题,包括你使用的编程语言、代码的具体情况以及你尝试过的解决方法。这样,其他人才能更好地帮助你。

>>> a = {"a": 600, "b": 75, "c": 75, "d": 90}
>>> b = {}
>>> for k,v in a.iteritems():
...     b[v] = b.get(v,0) + 1
...
>>> b
{600: 1, 90: 1, 75: 2}
>>>
2

当Python 2.7发布时,你可以使用它的collections.Counter类

如果没有的话,可以看看这个计数的例子

在Python 2.7a3版本下

from collections import Counter
items = {"a": 600, "b": 75, "c": 75, "d": 90}    
c = Counter( items )

print(  dict( c.items() ) )

输出结果是

{600: 1, 90: 1, 75: 2}

7

你可以使用itertools库里的groupby功能来实现这个。

import itertools
x = {"a": 600, "b": 75, "c": 75, "d": 90}
[(k, len(list(v))) for k, v in itertools.groupby(sorted(x.values()))]

撰写回答