我一直在尝试删除列表中的多个词典,但我一次只能删除一个词典。
以下是我正在处理的主要代码。记录是词典列表。我想删除其中包含0的字典。
Records = [{'Name':'Kelvin','Price': 0},{'Name': 'Michael','Price':10}]
我想删除价格为0
的词典def deleteUnsold(self):
for d in records:
for key, value in d.items():
if d['Price'] == 0:
records.remove(d)
答案 0 :(得分:11)
使用list comprehension if
条件
>>> Records = [{'Name':'Kelvin','Price': 0},{'Name': 'Michael','Price':10}]
>>> [i for i in Records if i['Price'] != 0]
[{'Price': 10, 'Name': 'Michael'}]
查看if/else in Python's list comprehension?以了解有关在列表中使用条件的详情 理解。
请注意[如上所述[{3}}],您也可以省略检查值0
。但是,如果Price
为None
,这也有效,因此如果您不确定Price
>>> [i for i in Records if i['Price']]
[{'Price': 10, 'Name': 'Michael'}]
答案 1 :(得分:2)
您可以使用filter:
print filter(lambda x:x['Price']!=0,Records)
答案 2 :(得分:0)
好的,一般来说,你不应该从你正在迭代的列表中删除项目,因为这可能会让你错过列表中的一些项目。
现在,关于这里所说的其他一些答案,是的,它们有效,但严格来说,他们并没有从列表中删除/删除项目:他们正在创建一个新列表并用一个旧变量替换旧变量新名单。
可以做些什么:
for d in list(records):
if d['Price'] == 0:
records.remove(d)
for d in reversed(records):
if d['Price'] == 0:
records.remove(d)
for idx in range(len(records)-1,-1,-1):
if records[idx]['Price'] == 0:
records.pop(idx)
我喜欢这个,但是:
for d in records[::-1]:
if d['Price'] == 0:
records.remove(d)