snippetpythonMinor
Entry filter for list of directories
Viewed 0 times
entryfilterforlistdirectories
Problem
I'm trying to filter a list composed of multiple dictionaries for useless entries and non-ideal fields. An entry is useless if
Sample
How can I make this as simple/efficient as possible?
Mem['visibility'] == "redacted" and then should be removed from the list. An entry is non-ideal when any of the fields are empty, and these should be filled with a 0 instead or if Mem['~whatever~'] is a list in which case the list should be transformed into a single string with all the objects in that list.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"):
print(Mem)
memberlist.remove(Mem)
return(memberlist)Sample
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'}]How can I make this as simple/efficient as possible?
Solution
- You could use a list and generator comprehension instead of
memberlist[:].
- You should use
snake_caseinstead ofCamelCasefor variables.
- You should use
isinstancerather thantype() is.
This is as it works on objects that extend
list. E.g. class MyCustomList(list): pass.- You should remove the
print.
They are quite slow, and is probably left over from debugging.
If I were to do the above I would use:
def members(member_list):
def handle_nonideal(item):
if not item:
return 0
if isinstance(item, list):
return ', '.join(item)
return item
return [
{
key: handle_nonideal(item)
for key, item in member.items()
}
for member in member_list
if member['visibility'] != 'redacted'
]Code Snippets
def members(member_list):
def handle_nonideal(item):
if not item:
return 0
if isinstance(item, list):
return ', '.join(item)
return item
return [
{
key: handle_nonideal(item)
for key, item in member.items()
}
for member in member_list
if member['visibility'] != 'redacted'
]Context
StackExchange Code Review Q#110140, answer score: 6
Revisions (0)
No revisions yet.