मुख्य सामग्री पर जाएं
मॉड्यूल 8 · पाठ 3 का 4पाठ्यक्रम में 31/36~12 min
मॉड्यूल पाठ (3/4)

संग्रह: काउंटर और डिफॉल्टडिक्ट

collections मॉड्यूल विशेष डेटा प्रकार जोड़ता है जो इसका विस्तार करता है अंतर्निर्मित संग्रह. तीन सबसे अधिक उपयोग किए गए: Counter, defaultdict, namedtuple.

Counter: आवृत्ति गणना

Python
from collections import Counter

parole = ["mela", "pera", "mela", "kiwi", "mela", "pera"]
c = Counter(parole)
# Counter({'mela': 3, 'pera': 2, 'kiwi': 1})

c["mela"]            # 3
c["banana"]          # 0   (default for missing keys, NO KeyError)
c.most_common(2)     # [('mela', 3), ('pera', 2)]

यह स्ट्रिंग्स पर भी काम करता है (वर्णों की गिनती करता है):

Python
Counter("ciao mondo")
# Counter({'o': 2, 'c': 1, 'i': 1, 'a': 1, ' ': 1, 'm': 1, 'n': 1, 'd': 1})

यह गिनती (+, -, और, |) पर सेट-जैसे संचालन का समर्थन करता है - बहुत आसान विभिन्न स्रोतों से गणना एकत्र करने के लिए।

defaultdict: स्वचालित डिफ़ॉल्ट के साथ निर्देश

एक निर्देश, जब आप किसी गुम कुंजी तक पहुंचते हैं, तो इसे कॉल करके बनाता है फ़ैक्टरी.

Python
from collections import defaultdict

gruppi = defaultdict(list)        # factory = list (empty list)
for nome in ["Ada", "Linus", "Ada", "Grace"]:
    gruppi[nome].append(1)
# defaultdict(list, {'Ada': [1, 1], 'Linus': [1], 'Grace': [1]})

defaultdict के बिना, आपको लिखना होगा:

Python
gruppi = {}
for nome in [...]:
    if nome not in gruppi:
        gruppi[nome] = []
    gruppi[nome].append(1)

सामान्य फ़ैक्टरियाँ: list, int (डिफ़ॉल्ट 0), set, dict।

namedtuple: फ़ील्ड नामों के साथ टुपल्स

अपरिवर्तनीय रिकॉर्ड-वर्ग बनाने का एक हल्का तरीका। यह एक टुपल है, लेकिन नाम से फ़ील्ड पहुंच के साथ।

Python
from collections import namedtuple

Punto = namedtuple("Punto", ["x", "y"])
p = Punto(3, 4)
p.x          # 3 (access by name)
p[0]         # 3 (access by index, still a tuple)
p.x + p.y    # 7

# typical use: return multiple values from a function
def divisione(a, b):
    Risultato = namedtuple("Risultato", ["quoziente", "resto"])
    return Risultato(a // b, a % b)

r = divisione(17, 5)
r.quoziente   # 3
r.resto       # 2

(अधिक परिष्कृत मामलों के लिए 3.7 से dataclasses भी है - M9 देखें।)

नेमटुपल: हल्के वजन वाले अपरिवर्तनीय रिकॉर्ड

collections मॉड्यूल namedtuple को भी निर्यात करता है, जो आपको कंस्ट्रक्टर या बॉयलरप्लेट विधियों को लिखे बिना संरचित डेटा को संग्रहीत करने के लिए हल्के वर्ग जैसी वस्तुओं को जल्दी से बनाने की सुविधा देता है:

Python
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p.x, p.y)

इसे अजमाएं

व्यायाम#python.m8.l3.e1
प्रयास: 0लोड हो रहा है...

सूची `शब्द = ['मेला', 'पेरा', 'मेला', 'कीवी', 'मेला', 'पेरा']` को देखते हुए, एक स्ट्रिंग के रूप में `शीर्ष` में सबसे अधिक बार आने वाले शब्द की गणना करें। `शीर्ष` का मूल्यांकन करें.

संपादक लोड हो रहा है...
संकेत दिखाएँ

काउंटर(...).most_common(1) रिटर्न [(शब्द, गिनती)]।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम की समीक्षा करें

व्यायाम#python.m8.l3.e2
प्रयास: 0लोड हो रहा है...

छात्रों के `नामांकन = [('एडीए', 'मेट'), ('लिनुस', 'फिसिका'), ('एडीए', 'स्टोरिया'), ('ग्रेस', 'मेट')]` को देखते हुए, `कोर्सेस_पर_स्टूडेंट` को डिफॉल्टडिक्ट (सूची) के रूप में बनाएं। `dict(courses_per_student)` का मूल्यांकन करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

defaultdict(list) फिर नामांकन में s, c के लिए।

3 प्रयासों के बाद समाधान उपलब्ध है

अतिरिक्त चुनौती

व्यायाम#python.m8.l3.e3
प्रयास: 0लोड हो रहा है...

\`संग्रह\` से \`काउंटर\` आयात करें। स्ट्रिंग \`text = "abracadabra"\` में वर्णों की आवृत्ति की गणना करें। काउंटर को \`char_counter\` में संग्रहीत करें और उसका मूल्यांकन करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

काउंटर स्ट्रिंग को एक पैरामीटर के रूप में लेता है और प्रत्येक अक्षर की घटनाओं को गिनता है।

3 प्रयासों के बाद समाधान उपलब्ध है