2014-09-26 2 views
-3

Мне нужно проверить словарь для ключей, значения whos идентичны, а затем вернуть ключи, которые имеют одинаковые значения.Как проверить идентичные значения в словарных клавишах, а затем вернуть ключи с этими одинаковыми значениями?

Мой код ниже:

count = {} 
x = "Helllo Worldddd5!" 

for s in x.lower(): 
    if s == ' ' or s.isdigit() or s in '[email protected]#$%^&*()></?:"': 
     continue 
    elif s in count.keys(): 
     count[s] += 1 
    else: 
     count[s] = 1 

что приводит:

count = {'e': 1, 'd': 4, 'o': 2, 'h': 1, 'w': 1, 'l': 4, 'r': 1} 

Как вы можете видеть, 'd' и 'л' имеют одинаковые значения. Я хочу перебирать пары ключ/значение и возвращать ключи, которые имеют одинаковые значения. Я хочу вернуть «h» и «l» в этом случае.

+2

_ "Как вы можете видеть, 'H' и 'L' имеют одинаковые значения." _ Я не понимаю. Значение H равно 1, а значение L равно 4. Они не кажутся мне идентичными. – Kevin

+0

's in count' было бы лучше, чем использование' count.keys() 'и как kevin прокомментировал h и l, похоже, не имеет ничего общего –

+2

Также' collections.Counter ([ele.lower() для элемента в x, если ele.isalpha()]) 'скорее всего, сделает то, что ваш код пытается сделать –

ответ

3

Вы можете сделать set уникальных значений count. Затем проверьте, какие ключи имеют эти значения в понимании dict.

count = {'e': 1, 'd': 4, 'o': 2, 'h': 1, 'w': 1, 'l': 4, 'r': 1} 
s = set(count.values()) 
d = {j : [i for i in count if count[i] == j] for j in s} 

>>> d 
{1: ['e', 'h', 'r', 'w'], 
2: ['o'], 
4: ['d', 'l']} 
0

Вы можете использовать collections.Counter и itertools.groupby

from collections import Counter 
from itertools import groupby 

counts = Counter([ele.lower() for ele in x if ele.isalpha()]).most_common() 
print [list(val[0] for val in list(v))for k, v in groupby(counts, key=lambda t: t[1])] 

[['d', 'l'], ['o'], ['e', 'h', 'r', 'w']] 
Смежные вопросы