Python:如何获取具有相同值的键?

Python:如何获取具有相同值的键?,python,python-3.x,Python,Python 3.x,从例子来看,我有 [('Han Decane','12333'),('Can Decane','12333'),('Al Right','10110')] 输出应该是 ['Han Decane','Can Decane'] 如何获取它?如果您希望它适用于任意密钥,可以使用OrderedDict的默认dict from collections import defaultdict, OrderedDict result_dict = defaultdict(OrderedDict) data

从例子来看,我有

[('Han Decane','12333'),('Can Decane','12333'),('Al Right','10110')]
输出应该是

['Han Decane','Can Decane']

如何获取它?

如果您希望它适用于任意密钥,可以使用OrderedDict的默认dict

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

可以创建从值到与这些值对应的所有键的映射

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的值,值作为相应旧键的列表

map[12333]
将是

['Han Decane','Can Decane']

还有一个答案,没有那些新奇的进口货

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

你有一个元组列表,还是一个真正的字典?如果有几组相等的值怎么办?顺序重要吗?你的字典是反序的。你的问题不清楚。您的标题指定了
,但您给出了一个元组列表作为示例。请编辑。我假设您希望避免重复。否则使用列表会更好。为什么使用OrderedDict?如果你想避免重复,请使用集合。否则你可能会返回
['Can Decane','Han Decane']
,并且顺序可能很重要。