我正在尝试过滤存储在字典中的服务器的响应。 词典包含列表。我要删除列表中不包含5个项目的每个键中的每个列表。
我尝试过这样的代码
def mutate_res(dic):
for key in dic.keys():
for response in dic[key]:
if len(response) != 5:
dic[key].remove(response)
return dic
我希望dic [value]仅具有包含5个项目的列表,但它不起作用,可能有3或5个项目
答案 0 :(得分:3)
您可以删除和删除密钥:
def mutate_res(dic):
delete_me = [ k for k in dic if len(dic[k])!=5]
for k in delete_me:
del dic[k]
return dic
这不会在迭代时删除任何内容,因此这样做是安全的。
误读了数据结构-要删除长度为!= 5的内部列表,您可以这样做:
def mutate_res(dct):
delete_me = [ k for k in dct if any(len(inner)!=5 for inner in dct[k])]
for k in delete_me:
dct[k] = [inner for inner in dct[k] if len(inner) == 5]
return dct
d = {1: [ [1,],[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5]]}
print(mutate_res(d)) # {1: [[1, 2, 3, 4, 5]]}
答案 1 :(得分:2)
由于您无需在原地对字典进行变异,因此您可以使用理解并返回正确的字典。尽管在这种情况下我会考虑更改函数的名称,以免引起误解。
def mutate_res(dic):
return {k:v for k,v in dic.items() if len(v) == 5}
d = {
'a': [1, 2, 3, 4, 5],
'b': [1,2],
'c': [1, 2, 3, 4, 5, 6],
'd': [1, 2, 3, 4, 5]
}
mutate_res(d)
>> {'a': [1, 2, 3, 4, 5], 'd': [1, 2, 3, 4, 5]}
答案 2 :(得分:1)
您可以修改代码以使用列表理解来过滤掉不需要的元素:
def mutate_res(dic):
for key in dic.keys():
dic[key] = [x for x in dic[key] if len(x) != 5]