collections — טיפוסי אוספים ומכלים

מודול זה מספק טיפוסי מכל מתמחים המשלימים את הטיפוסים המובנים list, tuple, dict ו-set: תור דו-קצותי (deque), מפעל ליצירת tuple עם שדות בעלי שם (namedtuple()), ומילון המשמר סדר (OrderedDict).

מחלקות

class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)

Deques (תורים דו-קצותיים) הם מכל הדומה לרשימה התומך בהוספות ובשליפות ב-O(1) משני צידי ה-deque. deques חדשים נוצרים באמצעות הארגומנטים הבאים:

  • iterable הוא אובייקט בר-איטרציה המשמש לאכלוס ה-deque בעת יצירתו. הוא יכול להיות tuple או רשימה ריקים כדי ליצור deque שריק בתחילה.

  • maxlen חייב להיות מצוין וה-deque יוגבל לאורך מרבי זה. כאשר ה-deque מלא, כל פריט חדש שיתווסף ידחה פריטים מהקצה הנגדי.

  • ה-flags האופציונלי יכול להיות 1 כדי לבדוק גלישה בעת הוספת פריטים.

אובייקטי deque תומכים ב-bool, len(), באיטרציה ובטעינה ואחסון באמצעות מנוי. כמו כן יש להם את המתודות הבאות:

append(x: Any) None

מוסיפה את x לצד ימין של ה-deque. מעלה IndexError אם בדיקת הגלישה מופעלת ואין עוד מקום בתור.

appendleft(x: Any) None

מוסיפה את x לצד שמאל של ה-deque. מעלה IndexError אם בדיקת הגלישה מופעלת ואין עוד מקום בתור.

pop() Any

מסירה ומחזירה פריט מצד ימין של ה-deque. מעלה IndexError אם אין פריטים.

popleft() Any

מסירה ומחזירה פריט מצד שמאל של ה-deque. מעלה IndexError אם אין פריטים.

extend(iterable: Iterable) None

מרחיבה את ה-deque על ידי הוספת כל הפריטים מ-iterable לצד ימין של ה-deque. מעלה IndexError אם בדיקת הגלישה מופעלת ואין עוד מקום ב-deque.

collections.namedtuple(name: str, fields: str | Sequence[str]) type

זוהי פונקציית מפעל ליצירת טיפוס namedtuple חדש בעל שם מסוים וקבוצת שדות. namedtuple הוא תת-מחלקה של tuple המאפשרת גישה לשדותיו לא רק באמצעות אינדקס מספרי, אלא גם בתחביר גישה לתכונה תוך שימוש בשמות שדות סמליים. Fields הוא רצף של מחרוזות המציין שמות שדות. לשם תאימות עם CPython הוא יכול להיות גם מחרוזת עם שמות שדות מופרדים ברווחים (אך זה פחות יעיל). דוגמה לשימוש:

from collections import namedtuple

MyTuple = namedtuple("MyTuple", ("id", "name"))
t1 = MyTuple(1, "foo")
t2 = MyTuple(2, "bar")
print(t1.name)
assert t2.name == t2[1]

מופעים מספקים גם את המתודה הבאה:

collections._asdict() OrderedDict

מחזירה את שמות השדות וערכיהם כ-OrderedDict.

class collections.OrderedDict(*args: Any, **kwargs: Any)

תת-מחלקה של הטיפוס dict הזוכרת ומשמרת את סדר המפתחות שנוספו. מקבלת את אותן צורות בנאי כמו dict (אובייקט בר-איטרציה של זוגות (key, value), מיפוי אחר, או ארגומנטים בשם). כאשר עוברים על ordered dict באיטרציה, המפתחות/הפריטים מוחזרים בסדר שבו נוספו:

from collections import OrderedDict

# To make benefit of ordered keys, OrderedDict should be initialized
# from sequence of (key, value) pairs.
d = OrderedDict([("z", 1), ("a", 2)])
# More items can be added as usual
d["w"] = 5
d["b"] = 3
for k, v in d.items():
    print(k, v)

פלט:

z 1
a 2
w 5
b 3
popitem() Tuple

מסירה ומחזירה זוג (key, value) מן המילון. הזוגות מוחזרים בסדר LIFO.

הבדל מ-CPython

OrderedDict.popitem() אינו תומך בארגומנט last=False ותמיד יסיר ויחזיר את הפריט האחרון, אם קיים.

פתרון עוקף לכך הוא להשתמש ב-pop(<first_key>) כדי להסיר את הפריט הראשון:

first_key = next(iter(d))
d.pop(first_key)