2015-12-08 2 views
-5

Из примера, у меня естьPython: как получить ключи с одинаковыми значениями?

[('Han Decane','12333'),('Can Decane','12333'),('Al Right','10110')] 

выход должен быть

['Han Decane','Can Decane'] 

, как я могу это получить?

+1

У вас есть список кортежей, или фактический словарь? – senshin

+0

Что делать, если есть несколько групп равных значений? – fjarri

+0

Имеет ли значение порядок? –

ответ

2

Если вы хотите, чтобы работать для любого произвольного ключа (ов) вы можете использовать defaultdict из OrderedDicts ..

from collections import defaultdict, OrderedDict 
result_dict = defaultdict(OrderedDict) 
data = [('Han Decane','12333'),('Can Decane','12333'),('AlRight','10110')] 
for (v,k) in data: 
    result_dict[k][v]=True 


>>> list(result_dict['12333'].keys()) 
['Han Decane', 'Can Decane'] 

И если вы хотите, чтобы все результаты, которые имели несколько значений

>>> [k for k in result_dict if len(result_dict[k]) > 1 ] 
['12333'] 
+0

Я предполагаю, что вы хотите избежать дубликатов здесь. В противном случае использование списка будет лучше. –

+0

Почему заказ? И если вы хотите избежать дубликатов, используйте набор. –

+0

Потому что в противном случае вы можете вернуться '['Can Decane', 'Han Decane']' и порядок может быть важен. –

0

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

from collections import defaultdict 
a = {'Han Decane':12333,'Can Decane':12333,'Al Right':10110} 
map = defaultdict(list) 
for i, j in map.iteritems(): 
    map[j].append(i) 

это создаст словарь списков с ключами как значения старого dict, а значения - как список соответствующих старых ключей.

ie.

map[12333] 

будет

['Han Decane','Can Decane'] 
0

И еще один ответ не все, что модные вещи импорта

data = [('Han Decane','12333'),('Can Decane','12333'),('AlRight','10110')] 
result_dict = {} 
for (v,k) in data: 
    if k not in result_dict: 
     result_dict[k] = set() 
    result_dict[k].add(v) 

print(result_dict) # {'10110': {'AlRight'}, '12333': {'Han Decane', 'Can Decane'}} 
print(list(result_dict['12333'])) # ['Can Decane', 'Han Decane'] 
Смежные вопросы