我一直在努力消除一些不符合我要求的命令项,具体是: 我有以下列表
[{'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
但是它并没有消除我不想要的所有东西,所以我想知道正确的出路是什么?
答案 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'}]