Python倒字典

时间:2016-03-15 16:04:33

标签: python dictionary

我目前正在编写一个函数,该函数使用具有不可变值的字典并返回反向字典。到目前为止,我的代码正在进行非常简单的测试,但仍有一些问题需要解决

def dict_invert(d):

     inv_map = {v: k for k, v in d.items()}

     return inv_map

     list1 = [1,2,3,4,5,6,7,8]
     list2 = {[1]:3245,[2]:4356,[3]:6578}
     d = {['a']:[],['b']:[]}
     d['a'].append(list1)
     d['b'].append(list2)

如何修复代码以使其通过测试用例?

我唯一的想法是将列表2更改为[1:32, 2:43, 3:54, 4:65];但是,我仍然有问题,让"[]"在正确的位置。我不知道该怎么做。

1 个答案:

答案 0 :(得分:3)

诀窍是要意识到多个键可以具有相同的值,因此在反转时,必须确保您的值映射到键列表。

from collections import defaultdict

def dict_invert(d):
  inv_map = defaultdict(list)
  for k, v in d.items():
    inv_map[v].append(k)
  return inv_map

修改

只需添加一些更有用的信息......

defaultdict(list)通过list()[]访问时,get会设置dict = KeyError的默认值(通常情况下它会引发None或返回{分别为{1}}。

使用该默认指令,您可以使用一些逻辑将键组合在一起......这是一个示例(来自我上面的评论)

原始字典:K0 - > V0,K1 - > V0,K2 - > V0

应反转为:V0 - > [K0,K1,K2]

编辑2:

您的测试似乎强迫您使用普通字典,在这种情况下......

def dict_invert(d):
    inv_map = {}
    for k, v in d.items():
        if v not in inv_map: 
            inv_map[v] = []
        inv_map[v].append(k)
     return inv_map