」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在保留順序的同時有效地從 Python 清單中刪除重複的物件?

如何在保留順序的同時有效地從 Python 清單中刪除重複的物件?

發佈於2024-11-03
瀏覽:460

How Do I Efficiently Remove Duplicate Objects from a Python List While Preserving Order?

使用 Python 高效處理重複對象

在 Python 中,可能需要從列表中刪除重複對象,同時保持原始順序。當您有自訂物件清單並希望根據某些條件過濾重複項或檢查資料庫中的重複項時,就會出現此問題。

根據您的特定要求,您需要定義物件內的唯一性才能有效使用set(list_of_objects) 方法。這涉及透過實作 eqhash 方法使物件可哈希。

eq 方法定義物件相等性。例如,如果您的Book 物件具有author_name 和title 屬性,其中作者和標題的組合是唯一的,則eq 方法可能如下所示:

def __eq__(self, other):
    return self.author_name == other.author_name and self.title == other.title

同樣,hash方法產生物件的雜湊值。常見的方法是對關鍵屬性的元組進行雜湊處理:

def __hash__(self):
    return hash(('title', self.title, 'author_name', self.author_name))

有了這些方法,您現在可以從Book 物件清單中刪除重複項:

books = [Book('title1', 'author1'), Book('title2', 'author2'), Book('title1', 'author1')]
unique_books = list(set(books))

此外,要檢查資料庫中的重複項,可以使用以下方法:

import sqlalchemy

session = sqlalchemy.orm.sessionmaker()()
records = session.query(YourModel).all()
existing_titles = set([record.title for record in records])
unique_objects = [obj for obj in objects if obj.title not in existing_titles]
最新教學 更多>
  • findSequence函數如何使用遞迴進行暴力搜尋?
    findSequence函數如何使用遞迴進行暴力搜尋?
    理解 FindSequence 函數中的遞歸提供的 findSequence 函數依照回溯的強力搜尋原理進行操作。以下是對其遞歸性質的逐步解釋:在每次遞歸調用時,該函數都會嘗試兩種可能的轉換:加法:它添加5 到當前數字,並將方程式與新數字一起儲存。 乘法:將當前數字乘以 3 並相應更新方程式。 遞...
    程式設計 發佈於2024-11-08
  • 了解 DSA 中的時間和空間複雜性:開發人員指南
    了解 DSA 中的時間和空間複雜性:開發人員指南
    介紹 在軟體開發領域,效率是關鍵。無論您是建立小型應用程式還是大型複雜系統,了解程式碼在各種條件下的執行情況都至關重要。這就是時間複雜度和空間複雜度的概念發揮作用的地方。這些指標可協助開發人員評估演算法的效率,引導他們編寫運行速度更快且消耗更少記憶體的程式碼。 在本文中,我們將深...
    程式設計 發佈於2024-11-08
  • 如何批次上傳CSV檔案資料到MySql表中?使用 LOAD DATA 的一種非常快速的方法。
    如何批次上傳CSV檔案資料到MySql表中?使用 LOAD DATA 的一種非常快速的方法。
    ?介紹 您是否仍在使用“for”或“while”循環來迭代行並將它們插入資料庫?您還在編寫單獨的程式碼來讀取 .csv 檔案並將其上傳到 MySQL 資料庫嗎? 用MySQL提供的「LOAD DATA」語句對線性邏輯說「NO」。準備好更改程式碼以最大限度地減少行數並大幅提高效能。...
    程式設計 發佈於2024-11-08
  • 使用住宅代理商解鎖 Facebook 的指南
    使用住宅代理商解鎖 Facebook 的指南
    Facebook作為全球最大的社群媒體平台之一,擁有多種業務場景,包括廣告服務、消費者通訊服務、電子商務、社群媒體平台等。這些業務場景為使用者提供了豐富的社交體驗和商機。在Facebook行銷管理中,穩定且有效率的代理商至關重要。不僅可以保護您的真實IP位址,還可以幫助您突破地域限制,管理多個帳戶,...
    程式設計 發佈於2024-11-08
  • 程式設計日快樂
    程式設計日快樂
    祝福所有社區程式設計師快樂! 這份職業給了我很大的滿足感,也因此我也實現了一些目標。 它讓我透過開發者社群和作為講師的工作與數百人更加接近。非常感謝。 也慶祝一下,享受你的一天。 9 月 12 日慶祝程式設計師節,以強調和慶祝​​在不同數位系統開發中工作的人們的作用。網頁、應用程式、遊戲、軟...
    程式設計 發佈於2024-11-08
  • 如何在 MySQL 中使用 LOAD DATA INFILE 填入自增欄位?
    如何在 MySQL 中使用 LOAD DATA INFILE 填入自增欄位?
    在MySQL 中使用LOAD DATA INFILE 填入自增欄位使用ID 列為自增欄位的現有表時,透過LOAD 匯入資料DATA INFILE 可能會帶來挑戰。本文提供了處理此類場景的有效解決方案。 為了清楚起見,請考慮以下表格結構:--------------------- ID | AFiel...
    程式設計 發佈於2024-11-08
  • JavaScript 中的記憶化:有效提升效能
    JavaScript 中的記憶化:有效提升效能
    簡介:加速 JavaScript JavaScript 是一種多功能但有時速度較慢的程式語言。如果您可以透過簡單的更改使應用程式運行得更快怎麼辦?記憶是一種可以透過記住先前的結果來極大地提高程式速度的技術。 什麼是記憶化? 記憶就像記下你已經解決的數學難題的筆記本。當你再次遇到同樣的問題時,你不...
    程式設計 發佈於2024-11-08
  • ## 使用下拉式選單時還需要 SQL 注入保護嗎?
    ## 使用下拉式選單時還需要 SQL 注入保護嗎?
    使用下拉式選單時 SQL 注入保護是否仍然適用? 人們普遍認為,應始終對使用者輸入持懷疑態度,因為SQL注入的風險。然而,出現了一個問題:這種擔憂是否會擴展到唯一用戶輸入來自下拉式選單的場景? 下拉限制和安全性雖然下拉式選單提供了預定義選項,它們不保證防止使用者輸入的惡意資料。攻擊者可以使用瀏覽器開...
    程式設計 發佈於2024-11-08
  • 可視化貓的偏好
    可視化貓的偏好
    偶然看到一篇文章,名字叫《為什麼貓…? 》,分析了貓咪的一些喜好和行為。裡面的視覺設計非常吸引我。其特點是採用手繪風格和氣泡式佈局。此外,可愛的字體也令人賞心悅目。我非常喜歡貓。我有一隻貓,名叫瓜瓜(意思是可愛又愚蠢)。同樣,我也是前端開發人員。我開發了一個名為 AntV G6 的圖形視覺化框架。因...
    程式設計 發佈於2024-11-08
  • 在黑客馬拉松中使用 Kintone 的技巧
    在黑客馬拉松中使用 Kintone 的技巧
    Introduction When you're participating in a hackathon, efficiency and quick iteration are key to success. One tool that can help you manage d...
    程式設計 發佈於2024-11-08
  • Camp Code - 一種有趣且簡單的學習程式碼的方法
    Camp Code - 一種有趣且簡單的學習程式碼的方法
    ? ?未來的程式設計傳奇,齊聚一堂!營地代碼著火了! ?? 短短 3 天(對程式設計愛好者來說這是 72 小時?): • 超過 1,300 位冒險家加入了我們的程式設計任務? • 超過 300 名勇敢的探索者創建了早期訪問帳戶來測試我們的測試版? ️ 為什麼這麼熱鬧? ? 因為 Camp Cod...
    程式設計 發佈於2024-11-08
  • 隨時隨地的套件管理器(幾天後可用。)
    隨時隨地的套件管理器(幾天後可用。)
    https://github.com/DiegoDev2/Fleet 介紹 Fleet:開發人員的簡單但功能強大的套件管理器? 作為開發人員,我們經常花費大量時間設定環境並安裝不同的工具。我創建了 Fleet 來讓這個過程更容易、更有效率。 什麼是艦隊? Fleet...
    程式設計 發佈於2024-11-08
  • 項目 檢查參數有效性
    項目 檢查參數有效性
    章節:方法設計 重點:方法設計的可用性、穩健性和靈活性。 涵蓋範圍:參數和傳回值處理、方法簽章設計和文件。 第 49 項:檢查參數有效性 - 參數限制: 方法和建構子通常對參數值有限制(例如非負索引、非空引用)。 這些限制必須在方法開始時記錄並驗證。 - 驗證的重要性: 儘早偵測錯誤,以避免...
    程式設計 發佈於2024-11-08
  • 如何在不刪除和重新建立約束的情況下重命名 MySQL 中的外鍵列?
    如何在不刪除和重新建立約束的情況下重命名 MySQL 中的外鍵列?
    重新命名MySQL 中的外鍵列:逐步指南當嘗試重命名MySQL 中充當外鍵列的列時外鍵在另一個表中時,常會遇到錯誤150,表示外鍵約束問題。為了克服這個問題,您可能會遇到這樣的問題:我們能否避免刪除外鍵、重新命名列,然後重新建立外鍵的複雜任務? 標準方法根據MySQL文件和提供的答案,最安全、最直接...
    程式設計 發佈於2024-11-08
  • Go 中如何表示介面:(值、型別)對或方法表?
    Go 中如何表示介面:(值、型別)對或方法表?
    理解 Go 中的介面表示在 Go 中使用介面時,掌握其底層表示非常重要。兩個關鍵資源闡明了這個主題,但他們的觀點不同。 「反射定律」文章(http://blog.golang.org/laws-of-reflection) 介紹了介面的概念包含一個(值,類型)對,如r io.Reader 的範例所示...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3