Я искал ошибку, которую он мне дал, но я не очень хорошо это понимаю. Они что-то сделали с for k, v in dbdata.items
, но это не сработало для меня, это дает мне другие ошибки.Удаление нескольких элементов в dict
Ну, я хочу удалить несколько элементов.
tskinspath = ['1', '2']
#
dbdata = {}
dbdata['test'] = {}
dbdata['test']['skins_t'] = {}
# Adds the items
dbdata['test']['skins_t']['1'] = 1
dbdata['test']['skins_t']['2'] = 0
dbdata['test']['skins_t']['3'] = 0
dbdata['test']['skins_t']['4'] = 0
# This doesn't work
for item in dbdata["test"]["skins_t"]:
if item not in tskinspath:
if dbdata["test"]["skins_t"][item] == 0:
del dbdata["test"]["skins_t"][item]
# exceptions.RunetimeError: dictonary changed size during iteration
Так что это быстрее, чем первый ответ, если есть много данных или лучше? Просто хочу убедиться, что я использую самый точный ответ. –
Это работает в Python2 (где 'items()' возвращает список), но не в Python3 (где 'items()' возвращает представление базового словаря). Я не знаю, что такое политика SO, на какую версию Python следует предполагать, когда вопросник не говорит. –
@Frederik 'items()' будет возвращать список a из пары ключей, значений и 'set (set (dbdata ['test'] ['skins_t']))' будет возвращать 'set' ключей. Так, в условия набора памяти будут более эффективными. –