Вывод n имеет вид: - ((6,5),'north',1)

Я делаю для него детское слово ... в котором (6,5) является ключом, а north и 1 - значениями. Мне нужно сохранить (6,5) в качестве ключа и north в качестве направления .... и я хочу продолжать добавлять все значения, пока цикл while не продолжится

1
Shilpa 18 Июл 2010 в 06:38

3 ответа

Лучший ответ

Если вы хотите сохранить все пары ключ / значение в одном файле (и все ключи, конечно, различны):

totaldict = {}

for ...whatever your loop is...:
   ...
   totaldict.update(( t[0], t[1:]) for t in n )

Если вам нужен список диктов, @ Сан ответит хорошо. Если вам нужен один элемент с не обязательно всеми разными ключами , а соответствующее значение каждого ключа - список кортежей:

import collections
totaldict = collections.defaultdict(list)

for ...whatever your loop is...:
    ...
    for t in n:
        totaldict[t[0]].append(t[1:])

Но могут быть и другие смыслы, которые вы могли бы обозначить как «сохранить все ценности этого словаря», но, как обычно, невозможно точно угадать в что из множества возможных значений, которые вы намереваетесь ,

Правка : из правки ОП (очень проясняющий его вопрос, хотя остается много темных аспектов, о которых я уже задавал некоторые из его предыдущих вопросов), ему не обязательно нужен один dict - он должен быть в состоянии отследить любой путь назад , когда он, наконец, доберется до узла, который объект задачи считает «решением» (или «целью»).

Редактирование OP в Q теперь, кажется, таинственным образом исчезло, но если (как я смутно помню) он пропускает какой-либо узел, который ранее был помещен в стек, то будет делать один дикт, потому что каждый узел будет посещен максимум один раз (следовательно, , без повторяющихся ключей) - однако , запись этого диктанта с узлом в качестве ключа не должна указывать на наследников узла (что бесполезно при отслеживании пути назад от цель!), но предшественнику , который привел к посещению этого узла (и к тому направлению, которое было получено от этого непосредственного предшественника, чтобы добраться до этого узла). Запись узла root должна быть пустой (так как у нее нет предшественника).

3
Alex Martelli 18 Июл 2010 в 03:51

Звучит так, будто вы хотите получить список словарей, но трудно сказать с таким небольшим контекстом.

my_list = []
while some_loop_condition:
    child = dict(( t[0], t[1:]) for t in n )
    my_list.append(child)
1
San Jacinto 18 Июл 2010 в 02:47

Похоже, что вы хотите определить 'child' снаружи цикла, и ссылаться на него внутри:

Например.:

child = {}

while blah:
    ...
    child.update(dict(( t[0], t[1:]) for t in n )
    ...
0
Slartibartfast 18 Июл 2010 в 03:31