遍历字典列表并删除元素

时间:2018-12-19 22:15:49

标签: python python-3.x dictionary

我遇到了一个我不太了解的问题。请查看给定的代码,其中两个相关变量的格式如下:

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])

目标是删除键dict等于lists的{​​{1}}中所有meanScore。问题是由于某种原因,循环只运行了None的一半...我想我已经在网站上的某个地方读到,当尝试从lists删除内容时,应该使用{{ 1}},但老实说,我无法弄清楚该怎么做,甚至与我的问题无关(据我了解,我正在删除列表元素)。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

解决这类问题的一种更Python的方法是考虑您要“保留”的内容。

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)

答案 1 :(得分:0)

lists = [{"genre": "XY", "meanScore": 'Float'}, {"genre": "XY", "meanScore": None}]
[d for d in lists if d['meanScore'] is not None]

这将给出以下输出

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