Python 如何从字典中删除某些项目?
我正在尝试从我存储在字典中的服务器筛选响应。 字典包含列表。我想删除每个键中不包含5项的列表 我试过这样的代码Python 如何从字典中删除某些项目?,python,dictionary,Python,Dictionary,我正在尝试从我存储在字典中的服务器筛选响应。 字典包含列表。我想删除每个键中不包含5项的列表 我试过这样的代码 def mutate_res(dic): 对于dic.keys()中的键: 对于dic[按键]中的响应: 如果len(响应)!=5: 驾驶员信息中心[钥匙]。删除(响应) 返回dic 我希望dic[value]只有包含5个项目的列表,但它不工作,它可能有3个或5个项目您可以获得删除和删除它们的键: def mutate_res(dic): delete_me = [ k fo
def mutate_res(dic):
对于dic.keys()中的键:
对于dic[按键]中的响应:
如果len(响应)!=5:
驾驶员信息中心[钥匙]。删除(响应)
返回dic
我希望dic[value]只有包含5个项目的列表,但它不工作,它可能有3个或5个项目您可以获得删除和删除它们的键:
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]]}
您可以获得要删除的密钥并将其删除:
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]]}
您可以修改代码以使用列表理解来过滤掉不需要的元素:
def mutate_res(dic):
for key in dic.keys():
dic[key] = [x for x in dic[key] if len(x) != 5]
您可以修改代码以使用列表理解来过滤掉不需要的元素:
def mutate_res(dic):
for key in dic.keys():
dic[key] = [x for x in dic[key] if len(x) != 5]
因为你不需要在适当的地方修改字典,你可以使用理解并返回正确的字典。虽然我会考虑在这种情况下更改函数的名称,但它不会误导。
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]}
因为你不需要在适当的地方修改字典,你可以使用理解并返回正确的字典。虽然我会考虑在这种情况下更改函数的名称,但它不会误导。
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]}
不要更改您迭代的可变对象。@错误语法自责,但我应该怎么做?我不想创建字典的另一个实例,存储您要删除的键,并在您遍历dict后删除它们。@Error syntacticalreforme我将尝试执行以下操作:您真的需要更改传入的字典,还是只返回一个具有正确值的字典?不要更改您迭代的可变对象。@Error syntacticalreforme但是我该怎么做呢?我不想创建字典的另一个实例存储您要删除的键,并在您遍历dict后删除它们。@Error syntacticalreforme我会尝试这样做您真的需要修改传入的字典还是只返回一个具有正确值的字典?选择
k
作为列表理解变量是一个愉快的选择吗在访问dic
?@Saysek
的键的值时拼写其他单词的意外情况-但是我重新命名了dic;o) 我不会那样看的。k是关键。我想Sayse认为dic[k]
是。。。冒犯性的东西,如果你问的话,这是牵强的me@Jean-弗朗索瓦·法布——不具攻击性,当你检查它的长度时有点有趣。Throfl没有看到Coming是选择k
作为列表理解变量的一个快乐的意外,它在访问dic
中的值时拼写了其他单词?@Saysek
用于键
-但是我重新命名了dic;o) 我不会那样看的。k是关键。我想Sayse认为dic[k]是。。。冒犯性的东西,如果你问的话,这是牵强的me@Jean-弗朗索瓦·法布-没有冒犯性,只是当你检查它的长度时有点有趣,但你没有看到它的到来