Изменение графика путем создания нового - PullRequest
0 голосов
/ 19 января 2011

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

{(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 голосов
/ 19 января 2011

Способ сделать это будет:

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

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

...