我有一个分类数据如下。我想比较它们并删除任何重复的内容。在这里,我做了一个简单的字段比较来测试代码。最初的要求是进行一些复杂的比较。因此,我需要明确地将前一个与后一个进行比较
比较并不是那么简单。这只是为了展示我将要取得的成就。有几个字段需要比较(但不是全部),删除以前的相同值,并保留新值,该值将具有递增的数字。因此,需要进行明确的比较。pop()和append()中有什么问题,即使我不迭代它?
我同时使用了list和deque。但也有重复的。代码有问题吗
import collections
data = [
{'name': 'Atomic', 'age': 28},
{'name': 'Atomic', 'age': 28},
{'name': 'Atomic', 'age': 28},
{'name': 'Atomic', 'age': 29},
]
dq = collections.deque()
for i in range(1, len(data)):
prev_name = data[i-1]['name']
prev_age = data[i-1]['age']
next_name = data[i]['name']
next_age = data[i]['age']
dq.append(data[i-1])
if prev_name == next_name and prev_age == next_age:
dq.pop()
dq.append(data[i])
else:
dq.append(data[i])
print(dq)
输出(实际):deque([{'name': 'Atomic', 'age': 28}, {'name': 'Atomic', 'age': 28}, {'name': 'Atomic', 'age': 28}, {'name': 'Atomic', 'age': 29}])
输出(应为):deque([{'name': 'Atomic', 'age': 28}, {'name': 'Atomic', 'age': 29}])
您可以尝试以下代码:
输出:
代码的问题是,您首先要附加上一个数据元素,然后如果当前变量和上一个变量相同,则您要删除最后一个元素,但您没有考虑的是,在中删除上一个元素后添加当前元素后:
在下一次迭代中,您将再次将先前添加的元素添加到:
因此,如果满足“if”条件,那么它将只从dq中删除最后一个元素(即数据[i-1]),而不是先前在dq中输入的最后一个元素。因此,在这里,它与相同的元素被复制
您可以尝试以下代码:
输出:
相关问题 更多 >
编程相关推荐