给定一本这样的字典:

my_map = {'a': 1, 'b': 2}

如何将此映射颠倒得到:

inv_map = {1: 'a', 2: 'b'}

当前回答

如果值不是唯一的,并且你有点硬核:

inv_map = dict(
    (v, [k for (k, xx) in filter(lambda (key, value): value == v, my_map.items())]) 
    for v in set(my_map.values())
)

特别是对于大型字典,请注意,此解决方案的效率远远低于Python reverse / invert映射的答案,因为它在items()上循环多次。

其他回答

我在循环'for'和方法'.get()'的帮助下写了这篇文章,我把字典的'map'名字改为'map1',因为'map'是一个函数。

def dict_invert(map1):
    inv_map = {} # new dictionary
    for key in map1.keys():
        inv_map[map1.get(key)] = key
    return inv_map

要做到这一点,同时保留映射的类型(假设它是一个dict或dict子类):

def inverse_mapping(f):
    return f.__class__(map(reversed, f.items()))
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})

这将提供输出为:{1:(' a ', ' d '), 2: [b], 3: [' c ']}

这是另一种方法。

my_map = {'a': 1, 'b': 2}

inv_map= {}
for key in my_map.keys() :
    val = my_map[key]
    inv_map[val] = key

我发现这个版本比10000个键的字典的公认版本快10%以上。

d = {i: str(i) for i in range(10000)}

new_d = dict(zip(d.values(), d.keys()))