multiple keys in python dictionary, is possible?
我想用python构建一个字典,其中不同的键引用相同的元素。我有这本字典:
1 | persons = {"George":'G.MacDonald',"Luke":'G.MacDonald',"Larry":'G.MacDonald'} |
键引用了一个相同的字符串,但是字符串在程序中有不同的内存位置,我想制作一个字典,在字典中所有这些键引用相同的元素,这是可能的吗?
你可以这样做:
1 2 3 4 5 6 7 8 | 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 |
这会将字典转换为一个字典,其中任何类型(但可比较的)的相等值都是唯一的。如果您的值不可比较(但可哈希),则可以使用临时
1 2 3 4 5 6 7 8 9 | 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))) |
号
如果您碰巧使用的是python 3,那么
1 2 | for k in persons: persons[k] = sys.intern(persons[k]) |
在Python2.7中,您可以用一个额外的步骤做大致相同的事情:
1 2 3 | interned = { v:v for v in set(persons.itervalues()) } for k in persons: persons[k] = interned[persons[k]] |
。
在2.x(<2.7)中,您可以编写