python含嵌套的列表去重問題


今天遇到一個問題,糾結一段時間后終於想到一個方法,挺開心的,就記錄下。

問題簡化之后是這樣的:對於python中類似這樣的一個列表

[{'A':2,'B':3,'C':4},{'A':2,'B':4,'C':5},{'A':2,'B':3,'C':5},{'A':2,'B':3,'C':6}]

其中列表的每個元素是有相同結構的字典,我想找出字典中A與B的組合是唯一的列表,C不同時選擇最初的那個。

我希望得到的最后結果是這樣的[{'A':2,'B':3,'C':4},{'A':2,'B':4,'C':5}]

如果是大家遇到這樣的問題會怎么處理呢?

我的想法是先找到重復的列表號,然后再刪除這些列表值。如上例中則先找到[2,3],不說太多,先把代碼給上把。

del_id = [] 
for i in range(len(test_list)):
    j = i+1;
    while(j and j!=len(test_list)):
        if (test_list[j]['A'] == test_list[i]['A']) and  (test_list[j]['B'] == test_list[i]['B']):
            del_id.append(j)
            j = 0
        else:
            j = j+1
de = 0
for item in del_id:
    id_de = item - de
    del test_list[id_de]
    de += 1

上面代碼挺簡單的,主要是有兩點一個是j從i+1開始比較,然后在遇到第一個滿足重復的條件時停止,其實我也不知道這樣是否能讓運算量稍微小點。

因為一開始只是得出列表號,所以列表並沒被改變,對於第三次出現的值我們會通過比較第二個重復值時找到列表號。

當時處理的列表長度貌似只是幾萬條,所以時間還好。

臨時想的方案肯定有很多待完善處,如果有同學發現哪里錯了或者有更好的辦法也希望能告知下啦。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM