回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我一直试图从其他帖子中找到答案,但没能</p>
<p>我有一本Python字典</p>
<pre><code>old_dict = { (1,'a') : [2],
(2,'b') : [3,4],
(3,'x') : [5],
(4,'y') : [5],
(5,'b') : [3,4],
(5,'c') : [6],
}
</code></pre>
<p>我需要把这个颠倒过来,这样我就可以:</p>
^{pr2}$
<p>(这描述了一个有限状态机的边缘,我需要向后运行它:它必须像以前一样接受反向输入)</p>
<p>例如,在旧的dict中,第一个键是一个list <code>(1, 'a') : [2]</code>,现在,这个键应该变成<code>(2, 'a'), [1]</code>。。。或者<code>(4,'y') : [5]</code>变成{<cd4>}等等。-我希望我的意思是可以理解的。在</p>
<p>我一直试图用列表理解来解决这个问题,但是还没有成功。在</p>
<p><strong>更新:</strong>我尝试了<a href="https://stackoverflow.com/a/10858286/577088">F.C.</a>的建议,但不知怎么的,我无法让代码正常工作。我把它插入到一个函数中,如下所示:</p>
<pre><code>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], []).<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(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)
</code></pre>
<p>但我只得到一个空字典<code>{}</code></p>
<p>我做错什么了吗?(我真的对Python知之甚少,所以如果我犯了一个愚蠢的错误,请原谅我…)</p>