我有一個列表的列表格式如下:Python的比較列表的列表
[[<image object1>, source1 , version1],[<image object2>, source2 , version2]...]
我需要比較每個列表和構建包含獨特的來源值列表的新列表。當有重複的源值時,我需要選擇具有最高版本值的列表。
另外,這是我應該使用的正確的數據結構嗎?
我有一個列表的列表格式如下:Python的比較列表的列表
[[<image object1>, source1 , version1],[<image object2>, source2 , version2]...]
我需要比較每個列表和構建包含獨特的來源值列表的新列表。當有重複的源值時,我需要選擇具有最高版本值的列表。
另外,這是我應該使用的正確的數據結構嗎?
您可以使用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]]
假設所有的子表有相同的三個項目的結構,這似乎是一個相當合理的數據結構來使用,因爲你可以隨時使用索引[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)