如何删除特定列表中不存在的列表字典中的项目?

时间:2019-04-28 13:52:02

标签: python-3.x

我一直在努力消除一些不符合我要求的命令项,具体是: 我有以下列表

[{'parameters': ['int', 'int'], 'function': 'checkIndex'},
 {'parameters': ['int'], 'function': 'valueOf'},
 {'parameters': ['float'], 'function': 'valueOf'},
 {'parameters': ['boolean'], 'function': 'valueOf'},
 {'parameters': ['long'], 'function': 'valueOf'},
 {'parameters': ['double'], 'function': 'valueOf'}]

但是我只想让那些项位于['float','double'],

我尝试了以下方法:

for i in a :
    for c in i['parameters']:
        if c not in ['int', 'float']:
            a.remove(i)
        else:
            continue

但是它并没有消除我不想要的所有东西,所以我想知道正确的出路是什么?

2 个答案:

答案 0 :(得分:0)

l = [{'parameters': ['int', 'int'], 'function': 'checkIndex'},
 {'parameters': ['int'], 'function': 'valueOf'},
 {'parameters': ['float'], 'function': 'valueOf'},
 {'parameters': ['boolean'], 'function': 'valueOf'},
 {'parameters': ['long'], 'function': 'valueOf'},
 {'parameters': ['double'], 'function': 'valueOf'}]

new_list = []
for d in l:
    if any(p not in {'int', 'float'} for p in d['parameters']):
        continue
    new_list.append(d)

print(new_list)

这似乎是一种快速的方法,但是它确实创建了一个新列表。尽可能在any上使用all来突破。

答案 1 :(得分:0)

要从Never modify a list you are iterating on开始,请使用另一个列表来保存结果,还请检查parameters键中的float和double,而不是检查not int or float,因为按消除总是比直接检查条件更糟糕!

a = [{'parameters': ['int', 'int'], 'function': 'checkIndex'},
 {'parameters': ['int'], 'function': 'valueOf'},
 {'parameters': ['float'], 'function': 'valueOf'},
 {'parameters': ['boolean'], 'function': 'valueOf'},
 {'parameters': ['long'], 'function': 'valueOf'},
 {'parameters': ['double'], 'function': 'valueOf'}]

res = []
#Iterate on a but save result on another list
for i in a:
    #Use any to check for parameters being float or double in parameters key
    if any([p in ['float', 'double'] for p in i['parameters']]):
        res.append(i)

print(res)

然后输出。

[{'parameters': ['float'], 'function': 'valueOf'}, {'parameters': ['double'], 'function': 'valueOf'}]