检查 Python 词典中是否存在重复键或值
Check if repeating Key or Value exists in Python Dictionary
以下是我的字典,我需要检查是否有重复的key或Value
dict = {' 1': 'a', '2': 'b', '3': 'b', '4': 'c', '5': 'd', '5': 'e'}
这应该 return false 或某种指示符可以帮助我打印出可能重复的键或值。如果我能够确定一个键是重复的还是一个值(但不是必需的),我将不胜感激。
嗯,在字典中,键不能重复,所以我们只需要处理值。
dict = {...}
# get the values
values = list(dict.values())
然后您可以使用 set()
检查重复项:
if len(values) == len(set(values)): print("no duplicates")
else: print("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}
字典不能有重复的键,所以在重复键的情况下它只保留最后一个值,所以检查值(单行是你的朋友):
print(('There are duplicates' if len(set(dict.values()))!=len(values) else 'No duplicates'))
怎么样
has_dupes = len(d) != len(set(d.values()))
我在 phone 上,所以无法测试。但我认为它会起作用。
嗯,虽然根据文档键值应该是唯一的,但仍然存在重复键可能出现的情况。
例如,
>>> 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 中的集合包含 unique 和 immutable 对象的无序集合,它可以自动获取所有唯一值即使您在 dict.values()
中有重复值
以下是我的字典,我需要检查是否有重复的key或Value
dict = {' 1': 'a', '2': 'b', '3': 'b', '4': 'c', '5': 'd', '5': 'e'}
这应该 return false 或某种指示符可以帮助我打印出可能重复的键或值。如果我能够确定一个键是重复的还是一个值(但不是必需的),我将不胜感激。
嗯,在字典中,键不能重复,所以我们只需要处理值。
dict = {...}
# get the values
values = list(dict.values())
然后您可以使用 set()
检查重复项:
if len(values) == len(set(values)): print("no duplicates")
else: print("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}
字典不能有重复的键,所以在重复键的情况下它只保留最后一个值,所以检查值(单行是你的朋友):
print(('There are duplicates' if len(set(dict.values()))!=len(values) else 'No duplicates'))
怎么样
has_dupes = len(d) != len(set(d.values()))
我在 phone 上,所以无法测试。但我认为它会起作用。
嗯,虽然根据文档键值应该是唯一的,但仍然存在重复键可能出现的情况。
例如,
>>> 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 中的集合包含 unique 和 immutable 对象的无序集合,它可以自动获取所有唯一值即使您在 dict.values()