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

2024-10-04 01:36:58 发布

您现在位置:Python中文网/ 问答频道 /正文

举个例子,我有

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

输出应该是

['Han Decane','Can Decane']

我怎样才能得到它?你知道吗


Tags: rightcan例子alhandecane
3条回答

如果您想对任意键执行此操作,可以使用OrderedDicts的defaultdict。。你知道吗

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

还有一个答案,没有那些花哨的进口货

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

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

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

相关问题 更多 >