从列表中的字典中删除列表中的字典

时间:2020-08-28 09:11:00

标签: python

我有两个列表(其中有字典):

old_device_data_list = [{'_id': ObjectId('5f48c8e34545fac49fbff5'), 'device_id': 5, 'time': datetime.datetime(2020, 8, 26, 9, 5, 39, 827000), 'values': {'count': 100, 'late': 0, 'max': 0, 'min': 0, 'on_time': 100, 'sum': 100}}]

result = [{'_id': ObjectId('5f48c8e3997640fac49fbff5'), 'device_id': 5, 'time': datetime.datetime(2020, 8, 26, 9, 5, 39, 827000), 'values': {'count': 100, 'late': 0, 'max': 0, 'min': 0, 'on_time': 100, 'sum': 100}}, {'_id': ObjectId('5f48c8e3997640fac49fbff6'), 'device_id': 4, 'time': datetime.datetime(2020, 8, 26, 9, 5, 39, 827000), 'values': {'count': 180, 'late': 0, 'max': 0, 'min': 0, 'on_time': 180, 'sum': 180}}, {'_id': ObjectId('5f48c8e3997640fac49fbff8'), 'device_id': 3, 'time': datetime.datetime(2020, 8, 27, 9, 5, 39, 827000), 'values': {'count': 50, 'late': 0, 'max': 0, 'min': 0, 'on_time': 50, 'sum': 50}}, {'_id': ObjectId('5f48c8e3997640fac49fbff7'), 'device_id': 4, 'time': datetime.datetime(2020, 8, 27, 9, 5, 39, 827000), 'values': {'count': 120, 'late': 0, 'max': 0, 'min': 0, 'on_time': 120, 'sum': 120}}, {'_id': ObjectId('5f48c8e3997640fac49fbff9'), 'device_id': 3, 'time': datetime.datetime(2020, 8, 28, 9, 5, 39, 827000), 'values': {'count': 210, 'late': 0, 'max': 0, 'min': 0, 'on_time': 210, 'sum': 210}}]

我想从old_device_data_list列表中删除result中的字典。我用numpy尝试过:

numpy.setdiff1d(result, old_device_data_list)

然后我得到了错误:

TypeError:“ dict”和“ dict”的实例之间不支持“ <”

1 个答案:

答案 0 :(得分:1)

numpy.setdiff1d的描述是:

返回ar1中不在ar2中的排序后的唯一值。

为了对值进行排序,需要使用<运算符对它们进行比较。但是字典不能像这样比较。没有为字典定义“小于”关系。

NumPy专为处理数字值而设计,不适用于任意Python数据结构。

您可以使用简单的列表理解来创建result中但不在old_device_data_list中的那些词典的列表:

result = [d for d in result if d not in old_device_data_list]