我有一个这样的列表:
list_values=[("10",1),("10",2),("16",2),("16",1),("15",1)]
我希望结果为:
Result=[("10",1),("16",2),("15",1)]
有人可以帮助我吗?
答案 0 :(得分:4)
看起来非常像How do you remove duplicates from a list whilst preserving order?,但只是“携带”第二个元素,没有将其包括在哈希/比较/任何内容中。
两种方法:
使用标记集记下第一个值的出现:
list_values=[("10",1),("10",2),("16",2),("16",1),("15",1)]
seen = set()
seen_add = seen.add
result = []
for k,v in list_values:
if k not in seen:
seen_add(k)
result.append([k,v])
print(result)
收益(保留订单):
[['10', 1], ['16', 2], ['15', 1]]
或对逆向项目使用字典以仅保留第一个值:
result = list(dict(reversed(list_values)).items())
print(result)
收益(不保留订单):
[('15', 1), ('10', 1), ('16', 2)]
使用collections.OrderedDict
并两次反转也可以保留顺序
import collections
result = list(reversed(list(collections.OrderedDict(reversed(list_values)).items())))
导致:
[('10', 1), ('16', 2), ('15', 1)]
那,除非使用Python 3.6+,否则字典将保留插入顺序。从python 3.5中,您可以删除一些强制列表转换,从而可以正常工作:
list(reversed(collections.OrderedDict(reversed(list_values)).items()))
答案 1 :(得分:1)
非常糟糕,OP无法尝试或不向我们展示一些解决方案,但是这里有一个简单的解决方案:
list_values = [("10",1),("10",2),("16",2),("16",1),("15",1)]
Result = list(dict(reversed(list_values)).items())
print(Result)
会给您:
[('15', 1), ('16', 2), ('10', 1)]