循环遍历dict列表并删除元素

2024-06-07 21:00:22 发布

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

我正面临一个我不太明白的问题。请看一下给定的代码,其中两个相关变量的形式如下:

jsd = {"data": {"User": .....}}
lists = [{"genre": "XY", "meanScore": Float},..., {"genre": "XY", "meanScore": Float}]

代码是:

jsd = json.loads(r.text)  
lists = jsd["data"]["User"]["stats"]["favouredGenresOverview"]
for k, entry in enumerate(lists):
    if entry["meanScore"] == None:
        del(lists[k])

目标是删除lists中的所有dict,其中键meanScore等于None。问题是由于某种原因,循环只在lists的一半上运行。。。我想我在网站上的某个地方读到过,当试图从dict中删除某个内容时,应该使用pop,但老实说,我不知道如何删除它,或者它是否与我的问题相关(据我所知,我正在删除列表元素)。你知道吗

有人能帮忙吗?你知道吗


Tags: 代码nonejsondatafloatdictlists形式
2条回答
lists = [{"genre": "XY", "meanScore": 'Float'}, {"genre": "XY", "meanScore": None}]
[d for d in lists if d['meanScore'] is not None]

这将产生以下输出

[{'meanScore': None, 'genre': 'XY'}]

对于这类问题,一种更为恶作剧的方法是想想你想“保留”什么。你知道吗

jsd = json.loads(r.text)  
lists = jsd["data"]["User"]["stats"]["favouredGenresOverview"]

output_list = [entry for entry in lists if entry["meanScore"] is not None]

如果你想在原地做的话,你可以用一个发电机和切片机来做。你知道吗

lists[:] = (entry for entry in lists if entry["meanScore"] is not None)

相关问题 更多 >

    热门问题