ここの他の投稿からこれを理解しようとしてきましたが、できませんでした。
私は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]
... になるか、またはetc に(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の知識がほとんどないので、ばかげた間違いをした場合はご容赦ください...)