"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني إزالة الكائنات المكررة بكفاءة من قائمة بايثون مع الحفاظ على الترتيب؟

كيف يمكنني إزالة الكائنات المكررة بكفاءة من قائمة بايثون مع الحفاظ على الترتيب؟

تم النشر بتاريخ 2024-11-03
تصفح:128

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

التعامل بكفاءة مع الكائنات المكررة باستخدام Python

في Python، قد يكون من الضروري إزالة الكائنات المكررة من القائمة مع الحفاظ على الترتيب الأصلي. تنشأ هذه المشكلة عندما يكون لديك قائمة بالكائنات المخصصة وترغب في تصفية التكرارات بناءً على معايير معينة أو التحقق من التكرارات في قاعدة بيانات.

فيما يتعلق بمتطلباتك المحددة، تحتاج إلى تحديد التفرد داخل الكائنات الخاصة بك لاستخدامها بفعالية طريقة المجموعة (list_of_objects). يتضمن ذلك جعل كائناتك قابلة للتجزئة من خلال تطبيق أساليب eq وhash.

تحدد طريقة eq المساواة بين الكائنات. على سبيل المثال، إذا كان لديك كائنات كتاب لها سمات اسم المؤلف والعنوان، حيث يكون مزيج المؤلف والعنوان فريدًا، فقد تبدو الطريقة 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))

باستخدام هذه الطرق، يمكنك الآن إزالة التكرارات من قائمة كائنات الكتاب:

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]
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3