我目前正在编写一个函数,该函数使用具有不可变值的字典并返回反向字典。到目前为止,我的代码正在进行非常简单的测试,但仍有一些问题需要解决
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]
;但是,我仍然有问题,让"[]"
在正确的位置。我不知道该怎么做。
答案 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