我有这种格式的列表列表:
[[<image object1>, source1 , version1],[<image object2>, source2 , version2]...]
我需要比较每个列表并构建一个包含唯一源值的列表的新列表。当存在重复的源值时,我需要选择具有最高版本值的列表。
另外,这是我应该使用的正确数据结构吗?
答案 0 :(得分:4)
您可以使用itertools.groupby
和max
功能:
>>> lst = [['foo', 1, 2], ['asdf', 2, 5], ['bar', 1, 3]]
>>> import itertools as it
>>> from operator import itemgetter
>>> [max(items, key=itemgetter(2))
for _,items in it.groupby(sorted(lst, key=itemgetter(1)), key=itemgetter(1))]
[['bar', 1, 3], ['asdf', 2, 5]]
答案 1 :(得分:0)
假设您的所有子列表都具有相同的三个项目结构,这似乎是一个相当合理的数据结构,因为您始终可以使用索引[0],[1]和[]来访问图像对象,源和版本2]。
此代码使源成为字典的键,并将这些键的值列入子列表。
bigList = [['foo', 1, 2], ['asdf', 2, 5], ['bar', 1, 3]]
uniqueSources = {}
for sublist in bigList:
currentSource = sublist[1]
if currentSource in uniqueSources:
if sublist[2] > uniqueSources[currentSource][2]:
uniqueSources[currentSource] = sublist
else: uniqueSources[currentSource] = sublist
dupesRemoved = list(uniqueSources.values())
print(dupesRemoved)