وحدة مجموعات Python: Counter ، و ChainMap ، و Deque & Tuple
نشرت: 2020-12-01تقدم وحدة Python Collections مجموعة من أنواع بيانات الحاوية التي تعمل على توسيع ميزات حاويات المخزون مثل القوائم و Tuples و Sets و Dictionaries. مع هذه الحاويات الخاصة ، لن يكون لديك فقط ميزات حاويات التخزين ، ولكن أيضًا بعض الطرق الإضافية التي تكون مفيدة جدًا لمهام معينة.
بنهاية هذا البرنامج التعليمي ، ستكون على دراية بما يلي:
- ما هي وحدة المجموعات؟
- وظائف مختلفة مثل:
- عداد
- سلسلة خريطة
- ديكي
- اسمه Tuple
- أمثلة العمل
تأتي وحدة التجميع مثبتة مسبقًا في Python ، لذا لا نحتاج إلى تثبيتها. يمكننا فقط استيراده وأنت على استعداد للذهاب! دعنا ندخل في الوظائف الأكثر استخدامًا بالتفصيل.
تعلم تعلم علم البيانات من أفضل الجامعات في العالم. اربح برامج PG التنفيذية أو برامج الشهادات المتقدمة أو برامج الماجستير لتتبع حياتك المهنية بشكل سريع.
يجب أن تقرأ: تطبيقات بايثون رائعة في العالم الحقيقي
جدول المحتويات
عداد
يعد العداد بسهولة الوظيفة الأكثر استخدامًا والأكثر فائدة في وحدة المجموعات. عداد هو فئة فرعية من فئة القاموس في بايثون. يقوم بحساب عدد تكرارات كل عنصر في متكرر (مثل السلاسل النصية ، المجموعات ، القوائم ، إلخ) ويخزنه في القاموس. مفاتيح القاموس هي العناصر الفريدة في العنصر القابل للتكرار والقيم هي عدد تلك العناصر.
لنجربها ببعض الأمثلة.
مجموعات الاستيراد أعجوبة = 'سيئة ولفيرين تخويف الفقراء الرجل الحديدي سيئة ولفيرين الفقراء الفقراء الرجل الحديدي' Marvel_count = المجموعات.Counter (Marvel.split ()) |
#انتاج: عداد ({ "سيئ" : 3 ، "حديد" : 2 ، "رجل" : 2 ، - ضعيف : 2 ، "ولفيرين" : 2 ، "تخويف" : 1 }) |
كما نرى ، يقوم بحساب تكرارات كل عنصر ووضعه في قاموس. يمكن استخدام هذا في أي نوع من التكرارات. الآن دعونا نرى ما هي كل الطرق التي لديها.
Marvel_count [ 'Bad' ] # >> 3 Marvel_count.values () # >>ict_values ([3 ، 2 ، 1 ، 2 ، 2 ، 2]) Marvel_count.keys () # >> dict_keys (['Bad'، 'Wolverine'، 'المتنمر'، 'Iron'، 'Man'، 'Poor']) |
تعرض طريقة most_common (n) قائمة بالعناصر الأكثر شيوعًا والمرتبة بترتيب تنازلي للعدد.
Marvel_count.most_common ( 2 ) # >> [('Bad'، 3)، ('Wolverine'، 2)] |
سلسلة خريطة
يتم استخدام ChainMap لعمل عرض واحد للعديد من القواميس بحيث يمكن الوصول إليها وتحديثها من العرض الفردي ، أي كائن ChainMap نفسه. ضع في اعتبارك أن خرائط السلسلة هذه تتكون فقط من المراجع إلى القواميس الفعلية ويتم التحديث أيضًا في القواميس الفعلية نفسها.
ChainMap هو امتداد لفئة القاموس ، لذلك يتم دعم جميع طرق القاموس ، بالإضافة إلى بعض الطرق الإضافية التي سنستعرضها.
dic1 = { 'a' : 1 ، 'b' : 2 } dic2 = { 'b' : 3 ، 'c' : 4 } Dic3 = { 'b' : 9 ، 'd' : 4 } chain1 = المجموعات.خريطة السلسلة (dic2، dic1) سلسلة 1 |
في الكود أعلاه ، نحدد قواميسين dic1 و dic2 ونضعهما في كائن ChainMap.
#انتاج: ChainMap ({ 'b' : 3 ، 'c' : 4 }، { 'a' : 1 ، 'b' : 2 }) |
كما نرى ، فإن dic2 "مقيد بالسلاسل" بـ dic1 بهذا الترتيب بالذات. جوهريًا ، يمكنك أن تتخيل أن dic2 متصل بـ dic1 مثل dic2–> dic1. لذلك عندما نبحث عن المفتاح "b" ، سيبحث أولاً في التعيين الأول وهو dic2 وإذا لم يتم العثور على المفتاح ، فسوف ينتقل إلى التعيينات التالية.
لذلك ، يعد ترتيب ChainMap مهمًا لتحديد التعيين الذي يتم البحث عنه أولاً. دعونا نرى ذلك في العمل.
chain1 [ 'b' ] # >> 3 |
كما نرى أعلاه ، يحتوي ChainMap على المفتاح "ب" في كلا القواميس. لذلك عندما نبحث عن المفتاح "b" ، فإنه يبحث في التعيين الأول وهو dic2 ويعيد القيمة.
سمة الخرائط
تُرجع سمة الخرائط ChainMap قائمة بالتعيينات بترتيب البحث ، أي أن dic2 هي أولًا في الخريطة ، لذلك سيتم البحث عنها أولاً وهكذا.
سلسلة 1 خرائط # >> [{'b': 3، 'c': 4}، {'a': 1، 'b': 2}] |
وبالمثل ، يمكننا التحقق من المفاتيح والقيم:
قائمة (chain1.keys ()) # >> ['a'، 'c'، 'b'] |
قائمة (chain1.values ()) # >> [1، 4، 3] |
كما نرى ، تظهر فقط المفاتيح الفريدة والقيم أيضًا.
new_child (م = لا شيء)
يتم استخدام طريقة new_child () لإضافة خرائط جديدة إلى ChainMap. تقوم هذه الطريقة بإرجاع خريطة سلسلة جديدة مع الخريطة الجديدة كخريطة أولى متبوعة ببقية الخرائط. إذا تم تحديد m ، فإنها تصبح الخريطة الأولى ، وإلا فسيتم إضافة قاموس فارغ كخريطة أولى.
chain1.new_child (dic3) سلسلة 1 خرائط |
#انتاج: [{ 'b' : 9 ، 'd' : 4 }، { 'b' : 3 ، 'c' : 4 }، { 'a' : 1 ، 'b' : 2 }] |
كما نرى ، أضاف dic3 في البداية وأعاد كائن ChainMap جديدًا.
عكس
قد تتساءل كيف يمكنك تغيير ترتيب ChainMap. يمكن تحقيق ذلك باستخدام الوظيفة المعكوسة التي ترجع مكررًا للتكرار خلال ChainMap في الاتجاه العكسي. دعونا نرى هذا في العمل.
المفتاح "ب" موجود الآن في جميع الخرائط. تحتوي الخريطة الأولى في ChainMap على المفتاح "b" بقيمة 9.
chain1 [ 'b' ] # >> 9 |
لنرى ما سيحدث بمجرد أن نكرر الاتجاه المعاكس.
chain1.maps = معكوسة (chain1.maps) chain1 [ 'b' ] # >> 2 |
ضع في اعتبارك أن الوظيفة المعكوسة لا تعكس التعيين حقًا ، إنها تعطي فقط مكررًا معكوسًا.
قراءة: دروس بايثون
ديكي
Deque (تُنطق باسم "سطح" ) هو امتداد للقوائم ، ولكنه ذو نهاية مزدوجة. يرمز Deque إلى: Double Ended Queue لأنه يمكننا إزالة / فرقعة وإلحاق العناصر في أي من طرفي Deques بكفاءة على عكس القوائم حيث تكون جميع العمليات على الجانب الأيمن.

يأخذ deque (iterable، maxlen) المتكررات ويعيد كائنات deque. لديهم أيضًا معامل maxlen الذي يقرر الحد الأعلى لعدد العناصر. إذا لم يتم تحديده ، يمكن أن تنمو deque إلى أجل غير مسمى. دعونا نلقي نظرة على أساليبها السريعة.
deq = المجموعات. التكتيك ([ 1 ، 2 ، 3 ، 4 ، 5 ]، maxlen = 6 ) deq.appendleft ( 8 ) |
#انتاج: دق ([ 8 ، 1 ، 2 ، 3 ، 4 ، 5 ]) |
كما نرى ، فإن استدعاء طريقة appendleft قد ألحق العنصر في الطرف الأيسر. علاوة على ذلك ، نظرًا لأننا قمنا بتهيئته باستخدام maxlen مثل 6 الذي وصل إليه الآن ، فإن إلحاق عنصر آخر سيؤدي إلى "StopIterationError".
لذلك ، دعنا نزيل العنصر الأيسر من معظم العناصر باستخدام popleft :
deq.popleft () # >> 8 |
يمكننا أيضًا إزالة عنصر معين حسب القيمة باستخدام إزالة:
deq.remove ( 5 ) # >> deque ([1، 2، 3، 4]) |
ملاحظة: استدعاء التابع remove مع عنصر ليس في deque سيؤدي إلى ظهور "ValueError".
يمكننا إدراج أي عنصر في الفهرس المحدد باستخدام إدراج (فهرس ، عنصر) .
deq.insert ( 2 ، 7 ) # >> deque ([1، 2، 7، 3، 4]) |
يمكن عكس Deque عن طريق استدعاء الطريقة العكسية .
deq.reverse () # >> deque ([4، 3، 7، 2، 1]) |
يمكن أيضًا تدوير Deque في اتجاه عقارب الساعة أو عكس اتجاه عقارب الساعة باستخدام طريقة التدوير .
# باتجاه عقارب الساعةديق.روت ( 2 )# >> deque ([2، 1، 4، 3، 7]) |
#عكس عقارب الساعةdeq.rotate ( -2 )# >> deque ([4، 3، 7، 2، 1]) |
اسمه Tuple
nametuple () هي زيادة كبيرة في كائن tuple المعتاد في Python. تسمح لنا المجموعات المسماة بفهرسة العناصر بأسمائها بدلاً من مجرد المواضع. يمكنك التفكير في المجموعات المسماة كجداول مع اسم الجدول كاسم المجموعة وأسماء الأعمدة كأسماء فهرس. يقوم Tuple المُسمى بشكل أساسي بتعيين معنى لكل عنصر لتسهيل الوصول إليه وكود أكثر قابلية للقراءة.
لنأخذ بعض الأمثلة ونفهم كيف يعمل.
الأداء = collections.ignedtuple ( 'Employee_Rating' ، [ 'Q1' ، 'Q2' ، 'Q3' ، 'Q4' ]) |
في الكود أعلاه ، قمنا بتعريف كائن Tuple المُسمى "Performance" بالاسم "Employee_Rating" مع أسماء الحقول مثل "Q1" و "Q2" و "Q3" و "Q4" والتي ستخزن التصنيفات الفصلية للموظفين. لنجعل 2 من إدخالات tuple المسماة من Employee_Rating.
راهول = الأداء ( 3 ، 4 ، 3.5 ، 4.5 ) ankit = أداء ( 4 ، 4.5 ، 4 ، 4.5 ) |
#انتاج: Employee_Rating (Q1 = 4 ، Q2 = 4.5 ، Q3 = 4 ، Q4 = 4.5 ) تصنيف_الموظف (Q1 = 3 ، Q2 = 4 ، Q3 = 3.5 ، Q4 = 4.5 ) |
الآن وقد أنشأنا مدخلين ، يمكننا الوصول إليهما عن طريق أسماء الفهرس.
ankit # >> 4 |
ankit.Q3> rahul.Q3 # >> صحيح |
لإضافة مدخلات جديدة ، أو إنشاء كائنات tuple مسماة جديدة ، يمكننا استخدام طريقة _make () .
Milkha = Performance._make ([ 4 ، 5 ، 5 ، 4.5 ]) ميلكا |
#انتاج: Employee_Rating (Q1 = 4 ، Q2 = 5 ، Q3 = 5 ، Q4 = 4.5 ) |
يمكننا تحرير العناصر باستخدام التابع _replace على أي مجموعة مسماة.
rahul._replace (س 1 = 2 ) |
#انتاج: تصنيف_الموظف (Q1 = 2 ، Q2 = 4 ، Q3 = 3.5 ، Q4 = 4.5 ) |
قبل ان تذهب
تحتوي وحدة المجموعات على بعض الوظائف المفيدة مثل OrderedDict و defaultdict و UserList و UserString و UserDict. تأكد من حصولك على بعض الأيدي على الوظائف التي ناقشناها في هذا البرنامج التعليمي. لا تجعل أنواع الحاويات هذه حياتك أسهل فحسب ، بل تعمل أيضًا على تحسين جودة الكود الذي تكتبه.
إذا كنت مهتمًا بمعرفة المزيد عن Python وعلوم البيانات ، فراجع برنامج IIIT-B & upGrad's Executive PG في علوم البيانات والذي تم إنشاؤه للمهنيين العاملين ويقدم أكثر من 10 دراسات حالة ومشاريع ، وورش عمل عملية عملية ، وإرشاد مع خبراء الصناعة ، وجهاً لوجه مع موجهين في الصناعة ، وأكثر من 400 ساعة من التعلم والمساعدة في العمل مع الشركات الكبرى.
ما هي وحدة التجميع ، وما مدى فائدتها؟
تدعم وحدة تجميع Python عدة أنواع من الحاويات. الحاوية عبارة عن كائن يستخدم لتخزين العناصر المختلفة وإعطاء الوسائل لاسترداد العناصر المغلقة وتكرارها. تتوفر Tuple و List و Dictionary والمزيد من الحاويات المضمنة. أيضًا ، تحتوي وحدة التجميع على أنواع بيانات حاوية عالية التخصص والفعالة ، مثل namedtuple () ، و deque ، و OrderedDict ، و counter ، وما إلى ذلك والتي تفوق بكثير حاويات Python القياسية.
هل وحدة التجميع موضوع ضروري لبايثون؟
نعم ، تعتبر وحدة التجميع موضوعًا ضروريًا أثناء تعلم بايثون. عد العناصر ، وإنشاء قوائم الانتظار والمكدسات ، وإدارة المفاتيح المفقودة في القواميس ، والمزيد ، كلها ممكنة باستخدام وحدة مجموعات Python. يتم إنشاء أنواع وفئات بيانات المجموعات لتكون فعالة و Pythonic. إنها ذات قيمة كبيرة بالنسبة إلى مهنتك في برمجة Python ، لذا فإن قضاء الوقت في التعرف على وحدة المجموعة هذه يستحق وقتك وجهدك. قد تكون الحاويات في وحدة المجموعات مفيدة جدًا للمشاريع والنماذج على مستوى الأعمال ، مما يضيف بشكل كبير إلى فائدة حاويات Python العامة من خلال تحسين سرعة التنفيذ والتحسين.
ما هي أنواع البيانات الموجودة في وحدة التجميع؟
توجد العديد من أنواع البيانات في وحدة التجميع ، مثل deque ، و defaultdict ، و namedtuple ، و OrderedDict ، و Counter ، و ChainMap ، و UserDict ، و UserList ، و UserString ، وما إلى ذلك ، ويمكن استخدام أنواع البيانات هذه لأسباب مختلفة ، مثل إضافة عناصر وإزالتها من أي منهما نهاية التسلسل ، وإنشاء القيم الافتراضية للمفاتيح المفقودة وإضافتها تلقائيًا إلى القاموس. يمكن أن تساعد أنواع البيانات هذه أيضًا من خلال توفير الحقول المسماة التي تسمح بالوصول إلى العناصر بالاسم مع الحفاظ على القدرة على الوصول إلى العناصر عن طريق الفهرس ، وعد العناصر الفريدة في تسلسل أو قابل للتكرار ، ومعالجة العديد من التعيينات ككائن قاموس واحد ، إلخ.