keyerror 1 в моем коде
Я пишу функцию, которая принимает ввод словаря и возвращает список ключей, имеющих уникальные значения в этом словаре. Рассмотрим,
ip = {1: 1, 2: 1, 3: 3}
Поэтому вывод должен быть [3], так как ключ 3 имеет уникальное значение, которого нет в dict.
Теперь есть проблема в данной функции:
def uniqueValues(aDict):
dicta = aDict
dum = 0
for key in aDict.keys():
for key1 in aDict.keys():
if key == key1:
dum = 0
else:
if aDict[key] == aDict[key1]:
if key in dicta:
dicta.pop(key)
if key1 in dicta:
dicta.pop(key1)
listop = dicta.keys()
print listop
return listop
Я получаю ошибку, как:
Файл "main.py", строка 14, в уникальных значениях
if aDict [key] == aDict[key1]: KeyError: 1
Где я делаю неправильно?
2 ответов:
Ваша главная проблема заключается в следующем:
dicta = aDictВы думаете, что делаете копию словаря, но на самом деле у вас все еще есть только один словарь, поэтому операции с dicta также изменяют aDict (и поэтому вы удаляете значения из adict, они также удаляются из aDict, и поэтому вы получаете свой KeyError).
Одним из решений будет
dicta = aDict.copy()(вы также должны дать своим переменным более четкие имена, чтобы сделать более очевидным для себя, что вы делаете)
(edit) также, более простой способ делать то, что вы делаете:
def iter_unique_keys(d): values = list(d.values()) for key, value in d.iteritems(): if values.count(value) == 1: yield key print list(iter_unique_keys({1: 1, 2: 1, 3: 3}))
Использование
Counterиз библиотекиcollections:from collections import Counter ip = { 1: 1, 2: 1, 3: 3, 4: 5, 5: 1, 6: 1, 7: 9 } # Generate a dict with the amount of occurrences of each value in 'ip' dict count = Counter([x for x in ip.values()]) # For each item (key,value) in ip dict, we check if the amount of occurrences of its value. # We add it to the 'results' list only if the amount of occurrences equals to 1. results = [x for x,y in ip.items() if count[y] == 1] # Finally, print the results list print resultsВывод:
[3, 4, 7]
Comments