删除列表中的多个词典

时间:2016-01-13 09:45:42

标签: python list dictionary

我一直在尝试删除列表中的多个词典,但我一次只能删除一个词典。

以下是我正在处理的主要代码。记录是词典列表。我想删除其中包含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)

3 个答案:

答案 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。但是,如果PriceNone,这也有效,因此如果您不确定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)