[英]replacing deleting empty values from dict, list recursively in python
我為刪除每個 Null 或空內容的任務編寫了以下代碼。 該腳本有效,但我認為它根本不是“pytonish”。 python 怎么做?
def remove_empty_values(ret):
#ret is assumed eitehr dict or list
#recursively remove all key or list items which values is Null or empty string
if type(ret) == list:
empty_indexes=[]
i = 0
for index in ret:
if (ret[i] == None) or ((type(ret[i]) == str and ret[i] == '') or ((type(ret[i]) == unicode and ret[i] == '') or (( type(ret[i])==dict or type(ret[i])==list ) and len(ret[i]) ==0))):
empty_indexes.append(i)
else:
if (type(ret[i])==dict or type(ret[i])==list):
remove_empty_values(ret[i])
i = i + 1
for index in empty_indexes:
del ret[index]
elif type(ret) == dict:
empty_keys=[]
for key in ret:
if (ret[key] == None) or ((type(ret[key]) == str and ret[key] == '') or ((type(ret[key]) == unicode and ret[key] == '') or (( type(ret[key])==dict or type(ret[key])==list ) and len(ret[key]) ==0))):
empty_keys.append(key)
else:
if (type(ret[key])==dict or type(ret[key])==list):
remove_empty_values(ret[key])
for key in empty_keys:
del ret[key]
如果您使用 Python 3.8+,則可以使用賦值表達式:=
:
例如:
d = {'a': [{'b': 'x', 'c': ''}], 'c': ['', '1', None], 'd': ['']}
def remove(i):
if isinstance(i, dict):
return {k: vv for k, v in i.items() if (vv:=remove(v))}
elif isinstance(i, list):
return [vv for v in i if (vv:=remove(v))]
return i
print(remove(d))
印刷:
{'a': [{'b': 'x'}], 'c': ['1']}
編輯:保持零和False
:
d = {'a': [{'b': 'x', 'c': ''}], 'c': ['', '1', None], 'd': ['', 0, False]}
def remove(i):
if isinstance(i, dict):
return {k: vv for k, v in i.items() if (vv:=remove(v)) or v is False or v == 0}
elif isinstance(i, list):
return [vv for v in i if (vv:=remove(v)) or v is False or v == 0]
return i
print(remove(d))
印刷:
{'a': [{'b': 'x'}], 'c': ['1'], 'd': [0, False]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.