我遇到了一个我不太了解的问题。请查看给定的代码,其中两个相关变量的格式如下:
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}},但老实说,我无法弄清楚该怎么做,甚至与我的问题无关(据我了解,我正在删除列表元素)。
有人可以帮忙吗?
答案 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'}]