![](/img/trans.png)
[英]List/Dict comprehension in Python to update a dictionary with keys and values from a string
[英]Remove empty string keys from nested dictionary, dict comprehension
這有效:
def delete_empty_keys(d):
new_d = {}
for key,value in d.items():
if key != '' and not isinstance(value, dict):
new_d[key] = value
elif key != '' and isinstance(value, dict):
new_d[key] = delete_empty_keys(value)
else:
pass
return new_d
如何將其轉化為字典理解? 我已經嘗試過了,但是我無法使它正常工作,我應該在最后else pass
。
def delete_empty_keys(d):
return {key: value
if key != '' and not isinstance(value, dict)
else delete_empty_keys(value)
if key != '' and isinstance(value, dict)
#else pass??
for key, value in d.items()
}
你的循環
for key,value in d.items():
if key != '' and not isinstance(value, dict):
new_d[key] = value
elif key != '' and isinstance(value, dict):
new_d[key] = delete_empty_keys(value)
else:
pass
真的只是測試,如果關鍵要被跳過, 或者如果不是,如何處理該值。 如果將密鑰測試拉出到單獨的if
語句,則可以將其重寫為
for key, value in d.items():
if key != '':
if not isinstance(value, dict):
new_d[key] = value
else:
new_d[key] = delete_empty_keys(value)
所以if key != '':
測試實際上是在過濾項目,選擇哪個應該是新字典的一部分。 理解中的過濾是通過循環中的其他if
組件完成的:
<item> for <target> in <iterable> if <test> # optional: more for loops and if tests
if <test>
部分過濾可迭代對象,從而限制使用哪些項目。 在字典理解中使用相同的內容。
這留下了內部if...else
測試,可以用條件表達式表示(在兩個選項之間進行選擇):
# iteration, for <target> in <iterable>
for key, value in d.items():
# filter, if <test>
if key != '':
# <item>, here a <key> and <value> expression for the dict comprehension
new_d[key] = value if not isinstance(value, dict) else delete_empty_keys(value)
現在,您可以將其轉換為字典理解的形式:
{
key: value if not isinstance(value, dict) else delete_empty_keys(value)
for key, value in d.items()
if key != ''
}
或者,在您的職能中:
def delete_empty_keys(d):
return {key: value if not isinstance(value, dict) else delete_empty_keys(value)
for key, value in d.items() if key != ''}
好吧,如果您真的想要這樣做:
def delete_empty_keys(d):
return {k: delete_empty_keys(v) if isinstance(v, dict)
else v
for k, v in d.items() if k != ''}
例:
d = {'': 'delete_me',
'a': {'': {'delete': 'me',
'me': 'too'},
'dont': 'delete_me',
'keep': 'me'},
'b': {'': 'bye'},
'c': 'not_nested'}
delete_empty_keys(d)
輸出:
{'a': {'dont': 'delete_me', 'keep': 'me'}, 'b': {}, 'c': 'not_nested'}
您不會pass
dict
理解,因為pass
不會返回任何內容。 理解力中的一切都應該返回一些東西。
另外,如注釋中所述: None != ''
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.