检查Python字典中是否存在重复的键或值

3
以下是我的字典,我需要检查是否有重复的键或值。
dict = {' 1': 'a', '2': 'b', '3': 'b', '4': 'c', '5': 'd', '5': 'e'}

这应该返回false或一些指示,以帮助我打印出键或值可能重复的信息。如果我能够确定一个键是否重复或一个值是否重复,那将非常感激(但不是必需的)。


以下所有解决方案都有效,我标记了我使用的那个。这些解决方案让我获得了各种经验。 - Prabhanjan
6个回答

5

字典不能有重复的键,因此在存在重复键的情况下,它只保留最后一个值,所以请检查值(一行代码就可以解决):

print(('There are duplicates' if len(set(dict.values()))!=len(values) else 'No duplicates'))

2
在字典中,键是不能重复的,所以我们只需要处理值。
dict = {...}

# get the values
values = list(dict.values())

然后你可以使用set()来检查重复项:

if len(values) == len(set(values)): print("no duplicates")
else: print("duplicates)

0

在Python中,字典只支持唯一键,因此无法检查字典中是否存在重复的键。如果您按原样输入字典,则冗余键仅与最后一个值相关联:

In [4]: dict = {' 1': 'a', '2': 'b', '3': 'b', '4': 'c', '5': 'd', '5': 'e'}

In [5]: dict
Out[5]: {' 1': 'a', '2': 'b', '3': 'b', '4': 'c', '5': 'e'}

0
一行代码查找重复值
In [138]: {v: [k for k in d if d[k] == v] for v in set(d.values())}
Out[138]: {'a': [' 1'], 'b': ['2', '3'], 'c': ['4'], 'e': ['5']}

使用set(d.values())检查dict的所有唯一值,然后创建一个与这些值对应的键列表。

注意:重复的键将被覆盖。

In [139]: {'a': 1, 'a': 2}
Out[139]: {'a': 2}

0

关于什么?

has_dupes = len(d) != len(set(d.values()))

我现在用手机,无法测试它。但我认为它会起作用。


0

虽然根据文档,键值应该是唯一的,但仍有可能出现重复键的情况。

例如:

>>> import json
>>> a = {1:10, "1":20}
>>> b = json.dumps(a)
>>> b
'{"1": 20, "1": 10}'
>>> c = json.loads(b)
>>> c
{u'1': 10}
>>>

但总的来说,当Python发现冲突时,它会采用最新分配给该键的值。

对于你的问题,你应该使用比较操作符,例如

len(dict) == len(set(dict.values()))

因为在Python中,set包含一个无序的唯一不可变对象集合,即使在dict.values()中有重复值,它也可以自动获取所有唯一的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接