#python #flask
#python #flask
Вопрос:
Цель: распечатать значения словаря с помощью цикла for
Вот воссозданная версия кода в качестве ссылки (не фактический код, работает точно так же):
import networkx as nx
random_dictionary = {
"name": "DAG",
"children": "None",
"father": "None",
"mother": "None",
"spouse": "None",
}
serializable_format = random_dictionary
for n in serializable_format:
print("[ ] node: " n ", edge: " str(serializable_format[n]['pre_transactions']))
for x in serializable_format[n]['pre_transactions']:
ledger.add_edge(n, x)
Когда я его выполняю, я постоянно сталкиваюсь со следующей ошибкой…
TypeError: string index indices must be integers or slices, not str
Я не могу вставить целое число в [n]
раздел, так как это выдало бы мне следующую ошибку
KeyError: (insert any number here)
Итак, как мне создать цикл for, который получает содержимое из словаря, не сталкиваясь с какими-либо ошибками?
Ответ №1:
Давайте разделим ответ на две части.
Во-первых, чтобы «распечатать значения словаря через цикл for», как и было запрошено, вы просто делаете:
for k in serializable_format:
print(serializable_format[k]
цикл перебирает ключи словаря. Вы должны проверить официальную документацию по dicts, особенно часть «Методы зацикливания». Вы найдете dict.items()
полезное использование.
Проблема в вашем коде в том, что serializable_format[n]
это строка («DAG», «None» и т. Д.). Выражение serializable_format[n]['pre_transactions']
пытается использовать строку 'pre_transactions'
для индексации первой строки, вызывая a TypeError
. Перепроверьте свой код, потому что вы ошибочно принимаете эти строки за какой-то другой тип (например dicts
), к которому можно получить доступ с помощью ключей (например 'pre_transactions'
). Возможно, ваш словарь должен быть не словарем строк, а словарем объектов другого типа.
Обратите внимание, что в вашем коде один цикл вложен в другой, поэтому для каждого ключа вы повторяете цикл снова.
Комментарии:
1. Большое спасибо за помощь!!! Хорошо, когда я удаляю [‘pre_transactions’] , код функционирует, но как именно вы бы порекомендовали включить [‘pre_transactions’] обратно в код, чтобы он мог функционировать?
2. Добро пожаловать. Я расширил ответ, предоставив дополнительную информацию, но я думаю, что это ответ на вопрос, который вы опубликовали. Невозможно улучшить его, не зная, что вы ожидаете сделать. Часть `[‘pre_transactions’]` не имеет смысла. Я предполагаю, что вы хотите вызвать
add_edge
пару (ключ, значение), но это не ответ на вопрос, который вы опубликовали. Я предполагаю, что вы хотите сделать что-то в строкеfor k, v in serializable_format.items(): print("[ ] node: " k ", edge: " str(serializable_format[k])) ledger.add_edge(k, v)
, но это только предположение.3. Это именно то, что я намеревался сделать, спасибо, чувак!