[英]Filtering Dictionary with List of Lists as Value
我有一本字典,其中的值是一個列表,例如:
Review_dict["0002"]
[['0002', '0292', '4', datetime.datetime(1998, 2, 27, 11, 1, 34)],
['0002', '0251', '5', datetime.datetime(1998, 2, 27, 12, 2, 24)],
['0002', '0050', '5', datetime.datetime(1998, 2, 27, 12, 3, 24)],
['0002', '0314', '1', datetime.datetime(1998, 3, 4, 10, 5, 45)]]
我想刪除某些列表(在“大”列表中),其中第二個元素 = '0251' 或 '0314'。
例如 Review_dict["0002"] 應該變成:
[['0002', '0292', '4', datetime.datetime(1998, 2, 27, 11, 1, 34)],
['0002', '0050', '5', datetime.datetime(1998, 2, 27, 12, 3, 24)]]
我想出了這段代碼,但我想知道是否有更簡單/更優雅的方式來做到這一點。
remove = ['0251', '0314']
for key in list(Review_dict):
for ID in remove:
for num in range(len(Review_dict[key])):
if Review_dict[key][num][1] == ID:
del Review_dict[key][num]
你可以改變你的外部字典的值:
remove = ['0251', '0314']
for v in Review_dict.values():
v[:] = (lst for lst in v if lst[1] not in remove)
通常,不應從列表中重復刪除,因為每次刪除都具有線性復雜性。 從頭開始構建是更好的選擇。 這是否表現更好取決於您的數據以及實際要刪除的數據量。
作為一種突變,切片分配v[:] =...
允許完全忽略外部字典的鍵,因為您不需要重新綁定它們。
您可以將列表理解用作:
import datetime
Review_dict = dict()
Review_dict["0002"] = [['0002', '0292', '4', datetime.datetime(1998, 2, 27, 11, 1, 34)],
['0002', '0251', '5', datetime.datetime(1998, 2, 27, 12, 2, 24)],
['0002', '0050', '5', datetime.datetime(1998, 2, 27, 12, 3, 24)],
['0002', '0314', '1', datetime.datetime(1998, 3, 4, 10, 5, 45)]]
print(Review_dict)
Review_dict["0002"] = [l for l in Review_dict["0002"] if l[1] not in ['0251', '0314']]
print(Review_dict)
Output:
{'0002': [['0002', '0292', '4', datetime.datetime(1998, 2, 27, 11, 1, 34)], ['0002', '0050', '5', datetime.datetime(1998, 2, 27, 12, 3, 24)]]}
在這里,您只取滿足條件的元素,即內部列表的第一個元素不存在於其他元素列表中。
您可以使用過濾方法並通過 lambda function
Review_dict["0002"] = list(filter(lambda x:x[1] not in remove,Review_dict["0002"]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.