我一直试图从这里的其他帖子中弄清楚这一点,但做不到。
我有一本 Python 字典
old_dict = { (1,'a') : [2],
(2,'b') : [3,4],
(3,'x') : [5],
(4,'y') : [5],
(5,'b') : [3,4],
(5,'c') : [6],
}
我需要扭转这一点,因此我将拥有:
new_dict = { (6,'c') : [5],
(5,'x') : [3],
(5,'y') : [4],
(4,'b') : [5, 2],
(3,'b') : [5, 2],
(2,'a') : [1],
}
(这描述了有限状态机的边缘,我需要向后运行它:它必须像以前一样接受反向输入)
例如,在 old_dict 中,第一个键是 list (1, 'a') : [2]
,现在,这个应该变成(2, 'a'), [1]
... 或(4,'y') : [5]
变成(5,'y') : [4]
等 - 我希望我的意思可以理解。
我一直在尝试用列表推导来解决这个问题,但还没有成功。
更新:我尝试了 FC的建议,但不知何故我无法让代码工作。我将它插入到一个函数中,如下所示:
old_dict1 = { (1,'a') : [2],
(2,'b') : [3,4],
(3,'x') : [5],
(4,'y') : [5],
(5,'b') : [3,4],
(5,'c') : [6],
}
def reverse_dict(old_dict):
new_dict = {}
add_to_dict = new_dict.setdefault
map(lambda kv: add_to_dict(kv[0], []).append(kv[1]),
sum([[((x, k[1]), k[0]) for x in v] for k, v in old_dict.items()],
[])) # sum will take this to start adding
return new_dict
new_dict1 = reverse_dict(old_dict1)
print(new_dict1)
但我只得到一个空字典{}
难道我做错了什么 ?(我对Python的了解真的很少,所以如果我犯了一个太愚蠢的错误,请原谅我......)