以列表的列表作为值的过滤字典



我有一个字典,值是列表的列表,例如:

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)]]

我想删除某些列表(在"big">

。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)

输出:

{'0002': [['0002', '0292', '4', datetime.datetime(1998, 2, 27, 11, 1, 34)], ['0002', '0050', '5', datetime.datetime(1998, 2, 27, 12, 3, 24)]]}

这里只取满足条件的元素,即内部列表的第一个元素不存在于其他元素列表中。

您可以使用filter方法并传递lambda函数

Review_dict["0002"] = list(filter(lambda x:x[1] not in remove,Review_dict["0002"]))

相关内容

  • 没有找到相关文章

最新更新