簡體   English   中英

如何在列表字典中刪除列表元素?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM