[英]How to remove elements of lists in a dictionary of lists?
我正在嘗試從列表字典中過濾掉討厭的None值。 這是一個示例字典:
parsed_data = {'DATA1': [None, None, None, None, None, None, None, None, None, None, None,
None, None, None, None, None, None, None, None, '0.17998362', '0.06388072',
'0.02091766', None, '0.00602364', '0.03171121', None, '1.39579976', '0.16731957',
'0.21564664', '0.03516583'], 'DATA2': [None, None, None, None, None, None, None,
None, None, None, None, None, None, None, None, None, None, None, None, None,
None, None, None, None, None, None, None, None, None, None, None, None], 'DATA3':
[None, None, None, None], 'DATA4': ['0.18406565', '0.06776296', '0.14278403',
'0.11962064', '0.00998447']}
我以為這個字典理解會起作用,但是如果在列表中的任何地方都找不到None ,它將刪除整個鍵。
filtered = {x:y for x,y in parsed_data.items() if len(y)>0 and None not in y}
我還嘗試過使用嵌套列表理解來進行字典理解,但是它看起來很瘋狂,只是看着它就被大腦融化了。
您需要遍歷列表中的元素以過濾無內容,並保留其他所有內容,如果要更改原始內容,只需更新每個列表:
for v in parsed_data.values():
v[:] = (ele for ele in v if ele is not None)
或者,如果您想要一個新的字典:
new = {k : [ele for ele in v if ele is not None] for k,v in parsed_data.items()}
兩者都會給你:
{'DATA1': ['0.17998362',
'0.06388072',
'0.02091766',
'0.00602364',
'0.03171121',
'1.39579976',
'0.16731957',
'0.21564664',
'0.03516583'],
'DATA2': [],
'DATA3': [],
'DATA4': ['0.18406565',
'0.06776296',
'0.14278403',
'0.11962064',
'0.00998447']}
如果您使用的是python 3,則可以將None組合過濾器用於第一個邏輯。 ne :
for v in parsed_data.values():
v[:] = filter(None.__ne__, v)
您可以使用以下dict
理解,然后將其分配回parsed_data
parsed_data = {key: [i for i in value if i] for key, value in parsed_data.items()}
產量
{'DATA2': [],
'DATA3': [],
'DATA1': ['0.17998362', '0.06388072', '0.02091766', '0.00602364', '0.03171121', '1.39579976', '0.16731957', '0.21564664', '0.03516583'],
'DATA4': ['0.18406565', '0.06776296', '0.14278403', '0.11962064', '0.00998447']}
您可以創建一個新的dic,將每個鍵的值設置為一個空列表,然后將!= None的值附加到每個列表中
new_arsed_data={}
for key,value in arsed_data.items():
new_arsed_data.setdefault(key,[])
for item in value:
if item!=None:
new_arsed_data[key].append(item)
與其他相比,這是一個更復雜/更少的pythonic答案,但是對於(像我這樣)對python來說是新手的人也許更容易理解:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.