通过创建新图表来更改图表

时间:2011-01-19 14:39:00

标签: python dictionary graph logic

我制作一个代表迷宫中所有动作的图表。事情是复制我重复的动作,所以我的字典输出如下:

{(1,2):[(2,2)],

(3,2):[(4,2),(3,3),(2,2)],

(3,3):[(3,2),(3,4)],

(5,2):[(5,3),(4,2)],

(4,4):[(5,4),(3,4)],

(5,4):[(5,3),(4,4)],

(2,2):[(3,2),(1,2)],

(4,2):[(5,2),(3,2)],

(3,4):[(4,4),(3,3)],

(5,3):[(5,2),(5,4)]}

我是如何根据旧词典制作新词典以及如何删除重复动作的?

编辑:这本词典只是一个例子。

1 个答案:

答案 0 :(得分:0)

一种方法是:

# Here's your node collection
toclean = {(1, 2): [(2, 2)],
(3, 2): [(4, 2), (3, 3), (2, 2)],
(3, 3): [(3, 2), (3, 4)],
(5, 2): [(5, 3), (4, 2)],
(4, 4): [(5, 4), (3, 4)],
(5, 4): [(5, 3), (4, 4)],
(2, 2): [(3, 2), (1, 2)],
(4, 2): [(5, 2), (3, 2)],
(3, 4): [(4, 4), (3, 3)],
(5, 3): [(5, 2), (5, 4)]}

# Here is a place to store nodes we've already seen
seen = set()

# Here is your new collection
result = {}

# Iterate over the original collection in sorted node order
for key, values in sorted(toclean.items()):
    # Mark node as seen
    seen.add(key)
    # Link it to any node that wasn't seen before
    result[key] = [val for val in values if val not in seen]

print result

{(1, 2): [(2, 2)],
 (2, 2): [(3, 2)],
 (3, 2): [(4, 2), (3, 3)],
 (3, 3): [(3, 4)],
 (3, 4): [(4, 4)],
 (4, 2): [(5, 2)],
 (4, 4): [(5, 4)],
 (5, 2): [(5, 3)],
 (5, 3): [(5, 4)],
 (5, 4): []}

但我想看看你如何生成图表:过滤效果更好。