Я проверил все остальные вопросы с той же ошибкой, но не нашел полезного решения = /
У меня есть словарь списков:
d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}
в котором некоторые значения пусты. В конце создания этих списков я хочу удалить эти пустые списки перед возвратом моего словаря. Тока я пытаюсь сделать это следующим образом:
for i in d:
if not d[i]:
d.pop(i)
однако, это дает мне ошибку во время выполнения. Я знаю, что вы не можете добавлять / удалять элементы в словаре, перебирая его ... что тогда можно обойти?
python
list
dictionary
loops
user1530318
источник
источник
keys
создает копию ключей, которые вы можете перебирать», так же как иplural
ключи? Иначе как можно перебрать один ключ? Между прочим, я не придираюсь, мне действительно интересно узнать, действительно ли это ключ или ключиfor i in d.keys()
самом деле работает в Python 3.x в целом , но поскольку оно выполняет итерацию по итеративному представлению ключей словаря, вызовd.pop()
во время цикла приводит к той же ошибке, что и вы.for i in list(d)
эмулирует немного неэффективное поведение Python 2, заключающееся в копировании ключей в список перед итерацией, для особых обстоятельств, подобных вашему.list(d.keys())
создает такой же вывод , какlist(d)
, вызовlist
на черезdict
возвраты ключей.keys
Вызова (хотя и не так дорого) не является необходимым.Просто используйте понимание словаря, чтобы скопировать соответствующие элементы в новый диктат
Для этого в Python 3
источник
d.iteritems()
дал мне ошибку. Я использовалd.items()
вместо этого - используя python3Вам нужно только использовать «копию»:
Таким образом, вы перебираете исходные словарные поля и на лету можете изменить желаемый dict (d dict). Это работает на каждой версии Python, так что это более понятно.
источник
Во-первых, я бы старался не вставлять пустые списки, но обычно использовал бы:
Если до 2.7:
или просто:
источник
Для Python 3:
источник
Вы не можете выполнять итерацию по словарю во время его изменения во время цикла for. Сделайте приведение в список и переберите этот список, он мне подходит.
источник
В подобных ситуациях я хотел бы сделать глубокую копию и пройтись по ней, изменяя исходный текст.
Если поле поиска находится в списке, вы можете перечислить его в цикле for списка, а затем указать позицию в качестве индекса для доступа к полю в исходном dict.
источник
Это сработало для меня:
Приведение элементов словаря в список создает список его элементов, поэтому вы можете перебирать его и избегать
RuntimeError
.источник
dictc = {"stName": "asas"} keys = dictc.keys () для ключа в списке (ключи): dictc [key.upper ()] = 'Новое значение' print (str (dictc))
источник
Причина ошибки во время выполнения состоит в том, что вы не можете выполнять итерацию по структуре данных, пока ее структура изменяется во время итерации.
Одним из способов достижения того, что вы ищете, является использование списка для добавления ключей, которые вы хотите удалить, а затем использование функции pop в словаре для удаления идентифицированного ключа во время итерации по списку.
источник
Python 3 не допускает удаления во время итерации (используя цикл выше) словаря. Есть различные альтернативы, чтобы сделать; один простой способ - изменить следующую строку
С участием
источник