删除di中的多个项目

2024-05-29 10:50:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我到处找它给我的错误,但我不太明白。他们用for k, v in dbdata.items做了一些事情,但这对我也不起作用,它给了我其他的错误。在

好吧,我想删除多个项目。在

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

Tags: the项目intestforif错误items
3条回答

不要迭代字典,而是迭代dict.items()

for key, value in dbdata["test"]["skins_t"].items():
     if key not in tskinspath:
        if value == 0:
            del dbdata["test"]["skins_t"][key]

在py3.x上使用list(dbdata["test"]["skins_t"].items())。在

备选方案:

^{pr2}$

错误消息显示:您不应该修改正在迭代的字典。试试看

for item in set(dbdata['test']['skins_t']):
   ...

这样您就可以迭代一个包含dbdata['test']['skins_t']中所有键的集合。在

由于问题细节与问题无关,如果您正在寻找从给定的dict中删除多个键的解决方案,请使用此片段

[s.pop(k) for k in list(s.keys()) if k not in keep]

另外,您可以通过理解创建一个新的dict。在

^{pr2}$

相关问题 更多 >

    热门问题