2011-01-19 3 views
0

Im делает граф, который представляет все движения в лабиринте. Дело в том, при копировании я повторил движение, поэтому выход из моего словаря выглядит следующим образом:Изменение графика путем создания нового

{(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)]}

Любая идея о том, как я могу создать новый словарь на основе старого и как удалить повторяющиеся движения?

Редактировать: Этот словарь является лишь примером.

ответ

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): []} 

Но я хотел бы посмотреть, как вы генерировать график: фильтрация там лучше.

Смежные вопросы