Проверьте, существует ли повторяющийся ключ или значение в словаре Python - PullRequest
0 голосов
/ 26 сентября 2018

Ниже приведен мой словарь, и мне нужно проверить, есть ли у меня повторный ключ или значение

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

Это должно возвращать false или какой-то индикатор, который помогает мне напечатать, что ключ или значение могут быть повторены,Было бы очень полезно, если бы я смог определить, повторяется ли ключ или значение (но не обязательно).

Ответы [ 6 ]

0 голосов
/ 26 сентября 2018

Ну, хотя значение ключа должно быть уникальным в соответствии с документацией, все еще есть условие, где может появиться повторяющийся ключ.

Например,

>>> 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()

0 голосов
/ 26 сентября 2018

Как насчет

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

Я нахожусь на своем телефоне, поэтому я не могу его проверить.Но я думаю, что это сработает.

0 голосов
/ 26 сентября 2018

В словарях не может быть дубликатов ключей, поэтому в случае повторяющихся ключей он сохраняет только последнее значение, поэтому проверьте значения (однострочник - ваш друг):

print(('There are duplicates' if len(set(dict.values()))!=len(values) else 'No duplicates'))
0 голосов
/ 26 сентября 2018

Однострочник для поиска повторяющихся значений

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']}

Проверьте все уникальные значения dict с помощью set(d.values()) и затем создайте список ключей, соответствующих этим значениям.

Примечание: повторяющиеся клавиши будут просто перезаписаны

In [139]: {'a': 1, 'a': 2}
Out[139]: {'a': 2}
0 голосов
/ 26 сентября 2018

Невозможно проверить, повторяется ли ключ в словаре, потому что словари в 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 голосов
/ 26 сентября 2018

Ну, в словаре ключи не могут повторяться, поэтому нам нужно иметь дело только со значениями.

dict = {...}

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

И затем вы можете использовать set() для проверки дубликатов:

if len(values) == len(set(values)): print("no duplicates")
else: print("duplicates)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...