给这样的字典:
my_map = {'a': 1, 'b': 2}
如何将这张地图倒置以得到:
inv_map = {1: 'a', 2: 'b'}
对于Python 2.7.x
如果值不是唯一的,并且您有点硬核:
除了上面建议的其他功能,如果您喜欢lambdas:
我认为做到这一点的最佳方法是定义一个类。这是“对称字典”的实现:
例如,您有以下字典:
这处理非唯一值,并保留了唯一情况的大部分外观。
函数对于类型列表的值是对称的;执行reverse_dict(reverse_dict(dictionary))
由于字典要求字典中的一个唯一键与值不同,因此我们必须将反转的值附加到要包含在新的特定键中的排序列表中。
对于python 2.7 / 3.x尝试此操作
非双射映射的快速功能解决方案(值不是唯一的::
我会在python 2中那样做。
假设字典中的值是唯一的:
def invertDictionary(d):
myDict = {}
for i in d:
value = d.get(i)
myDict.setdefault(value,[]).append(i)
return myDict
print invertDictionary({'a':1, 'b':2, 'c':3 , 'd' : 1})
def reverse_dictionary(input_dict):
out = {}
for v in input_dict.values():
for value in v:
if value not in out:
out[value.lower()] = []
for i in input_dict:
for j in out:
if j in map (lambda x : x.lower(),input_dict[i]):
out[j].append(i.lower())
out[j].sort()
return out
没有什么完全不同的地方,只是从Cookbook重写了一些食谱。通过保留setdefault
方法(而不是每次通过实例获取它)进一步优化了它:
[我是在循环'for'和方法'.get()的帮助下编写的,由于'map'是一个函数,我将字典的名称'map'更改为'map1'。
如果值不是唯一的并且可能是哈希(一维):
如果my_map
中的值不是唯一的:
在保留映射类型的同时进行此操作(假设它是dict
或dict
子类):
尝试一下:
另一种更实用的方法:
这扩展了答案by Robert,适用于字典中的值不是唯一的情况。
我们也可以使用defaultdict
来反转具有重复键的字典:
列表和字典理解的组合。可以处理重复的密钥