繁体   English   中英

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

[英]Check if repeating Key or Value exists in Python Dictionary

以下是我的字典,我需要检查是否重复键或值

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

这应该返回false或某种指示符,可以帮助我打印出可能重复的键或值。 如果我能够确定是重复键还是值(但不是必需的),将不胜感激。

在字典中,键不能重复,因此我们只需要处理值。

dict = {...}

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

然后,您可以使用set()检查重复项:

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

字典不能有重复的键,因此在重复键的情况下,它仅保留最后一个值,因此请检查值(单线是您的朋友):

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

无法检查键是否在字典中重复,因为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'}

一线寻找重复价值

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}

关于什么

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

我在用手机打电话,所以无法测试。 但j认为它将起作用。

很好,尽管根据文档说明键值应该唯一,但是仍然存在重复键可能出现的情况。

例如,

>>> 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中设置的集合包含无序的唯一不可变对象集合,所以即使您在dict.values()有重复值,它也可以自动获取所有唯一值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM