2013-12-09 8 views
0

Как найти и удалить повторяющиеся значения вместе со своими ключами из словаря.Как найти повторяющиеся значения в словарях

Пример:

f = {1:4, 1:3, 4:4, 9:4, 5:7} 

Выход:

f = f = {1:3, 5:7} 

Как вы можете видеть все ключи с дублируют значения 4 были удалены ...

также есть способ отслеживать, сколько элементов было удалено ... в приведенном выше случае 3 элемента были удалены.

+0

Я не знаю, с чего начать ... Я искал много .. но все ответы я получил не я не могу соединиться с тем, чего я пытаюсь достичь. – user3029969

+0

Просто перейдите через 'f.values ​​()' и для каждого значения повторите попытку, чтобы увидеть, есть ли дубликаты, и удалите их. Хотя это было бы неэффективно ('O (n^2)') – hkk

+1

Неясно, что ваш результирующий словарь будет иметь в нем '1: 3', потому что' 1: 4' и '1: 3' разделяют одинаковые так что один из них не будет существовать, и в зависимости от порядка ввода он может быть «1: 3». – SethMMorton

ответ

1

отслеживать, сколько элементов были удалены вы можете просто создать переменную = 0, а затем + = переменная на 1 за каждый раз, когда она удаляет что-то

или

можно просто измерить len (f), прежде чем вы это сделаете, а затем измерьте len (f) после запуска кода и посмотрите, какая разница между ними, и вы получили, сколько предметов было удалено.

+0

ahh да, это интересный и простой способ выяснить, сколько предметов было удалено ...Благодарю вас за помощь! – user3029969

4

Подсчитайте значения :

import collections 
value_occurrences = collections.Counter(f.values()) 

затем отфильтровать те, которые появляются более одного раза:

filtered_dict = {key: value for key, value in f.items() 
       if value_occurences[value] == 1} 

Чтобы узнать, сколько было удалено, просто вычесть размер нового Dict от старого.

+0

дает ошибку, что коллекции не определены – user3029969

+0

@ user3029969: 'импортировать коллекции' сначала. – user2357112

+0

просто для того, чтобы понять ... ключ: значение для ключа, значение в f.items() ... что делает эта строка – user3029969

1

попробовать это

list1=[] 
f = {1:4, 1:3, 4:4, 9:4, 5:7} 
for value in f.values(): 
     if value not in list1: 
       list1.append(value) 
for key in f.keys(): 
     if key in list1: 
       del f[key] 
return f 

выход будет

{1: 3, 5: 7, 9: 4} 
Смежные вопросы