在Python中简化列表过滤器
我正在尝试筛选由多个字典组成的列表,以查找无用的条目和非理想字段。如果在Python中简化列表过滤器,python,list,filter,generator,Python,List,Filter,Generator,我正在尝试筛选由多个字典组成的列表,以查找无用的条目和非理想字段。如果Mem['visibility']=“redated”,则条目无效,然后应从列表中删除。当任何字段为空时,条目都是不理想的,应该用0代替,或者如果Mem['~which~']是一个列表,则该列表应转换为一个字符串,其中包含该列表中的所有对象。为此,我编写了以下代码: class Filter: @staticmethod def members(memberlist): for Mem in
Mem['visibility']=“redated”
,则条目无效,然后应从列表中删除。当任何字段为空时,条目都是不理想的,应该用0代替,或者如果Mem['~which~']
是一个列表,则该列表应转换为一个字符串,其中包含该列表中的所有对象。为此,我编写了以下代码:
class Filter:
@staticmethod
def members(memberlist):
for Mem in memberlist:
for Item in Mem:
if not Mem[Item]:
Mem[Item] = 0
if (type(Mem[Item]) is list):
Mem[Item] = ', '.join(Mem[Item])
if(Mem['visibility'] == "redacted"):
memberlist.remove(Mem)
return(memberlist)
成员名单样本:
[
{'roles': [],
'rank': 'No SCB account',
'type': 'main',
'stars': 2,
'visibility': 'visible',
'sid': 'imperium',
'handle': 'freakyeagle'
},
{'roles': [],
'rank': 'Fleet Member',
'type': 'main',
'stars': 1,
'visibility': 'visible',
'sid': 'imperium',
'handle': 'cadimus'},
{'roles': [],
'rank': 'Fleet Member',
'type': 'main',
'stars': 1,
'visibility': 'visible',
'sid': 'imperium',
'handle': 'belleal'}
]
我如何使这尽可能简单/高效
此外,由于某种原因,当我从上面代码中的列表中删除无用的Mem时,它会中断我在数据库中的插入,这发生在以下函数中(上面函数中的memberlist相当于此函数中的member):
有人知道为什么会发生这种情况吗?在对列表进行迭代时,不应该从列表中删除项目-当删除项目后跳过项目时,会出现意外行为 取而代之的是,制作列表的副本以进行迭代:
for mem in memberlist[:]:
...
或者将您想要的结果保存到另一个列表中并返回:
keep = []
for mem in memberlist:
if ...:
keep.append(mem)
return keep
顺便说一句,不要在遍历列表时从列表中删除项目-这会在跳过列表中的某些项目时产生意外的结果。最好的方法是什么?创建一个要删除的Mem列表,然后将其删除?可以在列表的副本上迭代(
,memberlist[:]:
),也可以将您希望保留的Mem添加到新列表中,然后返回该列表。只需一个注释;如果Mem[Item]
是一个空列表,您将把它转换为0
,因为如果不是Mem[Item]:
将为空列表返回True。如果您没有bug或问题,并且您所追求的只是代码是否有效,那么最好在:-)上提问
keep = []
for mem in memberlist:
if ...:
keep.append(mem)
return keep