我想在python中构建一个字典,其中不同的键引用相同的元素。我有这本词典:
persons = {"George":'G.MacDonald', "Luke":'G.MacDonald', "Larry":'G.MacDonald'}
键指的是一个相同的字符串,但字符串在程序中有不同的内存位置,我想制作一个字典,其中所有这些键都引用相同的元素,这可能吗?
答案 0 :(得分:5)
您可以执行以下操作:
import itertools as it
unique_dict = {}
value_key=lambda x: x[1]
sorted_items = sorted(your_current_dict.items(), key=value_key)
for value, group in it.groupby(sorted_items, key=value_key):
for key in group:
unique_dict[key] = value
这会将您的字典转换为字典,其中任何类型的相同值(但可比较)都是唯一的。如果您的值不具有可比性(但可以清除),则可以使用临时dict
:
from collections import defaultdict
unique_dict = {}
tmp_dict = defaultdict(list)
for key, value in your_current_dict.items():
tmp_dict[value].append(key)
for value, keys in tmp_dict.items():
unique_dict.update(zip(keys, [value] * len(keys)))
答案 1 :(得分:1)
如果你碰巧使用python 3,sys.intern
提供了一个非常优雅的解决方案:
for k in persons:
persons[k] = sys.intern(persons[k])
在Python 2.7中,您可以通过一个额外步骤执行大致相同的操作:
interned = { v:v for v in set(persons.itervalues()) }
for k in persons:
persons[k] = interned[persons[k]]
在2.x(< 2.7)中,您可以改为编写interned = dict( (v, v) for … )
。