Apakah ada batasan ukuran kamus di python?

Modul ini mengimplementasikan tipe data wadah khusus yang menyediakan alternatif untuk wadah bawaan umum Python, , , , dan

fungsi pabrik untuk membuat subkelas tuple dengan bidang bernama

wadah seperti daftar dengan penambahan cepat dan muncul di kedua ujungnya

kelas seperti dict untuk membuat tampilan tunggal dari beberapa pemetaan

dict subclass untuk menghitung objek hashable

subkelas dict yang mengingat entri pesanan ditambahkan

subkelas dict yang memanggil fungsi pabrik untuk memberikan nilai yang hilang

bungkus di sekitar objek kamus untuk subkelas dict yang lebih mudah

bungkus di sekitar objek daftar untuk subkelas daftar yang lebih mudah

bungkus di sekitar objek string untuk subklasifikasi string yang lebih mudah

objek

Baru di versi 3. 3

Kelas disediakan untuk menghubungkan sejumlah pemetaan dengan cepat sehingga dapat diperlakukan sebagai satu kesatuan. Ini seringkali jauh lebih cepat daripada membuat kamus baru dan menjalankan banyak panggilan

Kelas dapat digunakan untuk mensimulasikan cakupan bersarang dan berguna dalam pembuatan templat

kelas . ChainMap(*peta)

Mengelompokkan beberapa dikte atau pemetaan lain bersama-sama untuk membuat satu tampilan yang dapat diperbarui. Jika tidak ada peta yang ditentukan, satu kamus kosong disediakan sehingga rantai baru selalu memiliki setidaknya satu pemetaan

Pemetaan yang mendasari disimpan dalam daftar. Daftar itu bersifat publik dan dapat diakses atau diperbarui menggunakan atribut peta. Tidak ada negara bagian lain

Pencarian mencari pemetaan yang mendasarinya secara berturut-turut hingga kunci ditemukan. Sebaliknya, penulisan, pembaruan, dan penghapusan hanya beroperasi pada pemetaan pertama

A menggabungkan pemetaan yang mendasarinya dengan referensi. Jadi, jika salah satu pemetaan dasar diperbarui, perubahan tersebut akan tercermin di dalamnya

Semua metode kamus biasa didukung. Selain itu, ada atribut peta, metode untuk membuat subkonteks baru, dan properti untuk mengakses semua kecuali pemetaan pertama

peta

Daftar pemetaan yang dapat diperbarui pengguna. Daftar ini diurutkan dari pencarian pertama hingga pencarian terakhir. Ini adalah satu-satunya status tersimpan dan dapat dimodifikasi untuk mengubah pemetaan mana yang dicari. Daftar harus selalu berisi setidaknya satu pemetaan

anak_baru(m=Tidak ada, **kwargs)

Mengembalikan peta baru yang berisi peta baru diikuti oleh semua peta dalam instance saat ini. Jika

>>> # Tally occurrences of words in a list
>>> cnt = Counter()
>>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
..     cnt[word] += 1
>>> cnt
Counter({'blue': 3, 'red': 2, 'green': 1})

>>> # Find the ten most common words in Hamlet
>>> import re
>>> words = re.findall(r'\w+', open('hamlet.txt').read().lower())
>>> Counter(words).most_common(10)
[('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631),
 ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]
6 ditentukan, itu menjadi peta baru di depan daftar pemetaan; .
>>> # Tally occurrences of words in a list
>>> cnt = Counter()
>>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
..     cnt[word] += 1
>>> cnt
Counter({'blue': 3, 'red': 2, 'green': 1})

>>> # Find the ten most common words in Hamlet
>>> import re
>>> words = re.findall(r'\w+', open('hamlet.txt').read().lower())
>>> Counter(words).most_common(10)
[('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631),
 ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]
_8. Jika ada argumen kata kunci yang ditentukan, mereka memperbarui peta yang diteruskan atau dict kosong baru. Metode ini digunakan untuk membuat subkonteks yang dapat diperbarui tanpa mengubah nilai di salah satu pemetaan induk

Berubah di versi 3. 4. Parameter opsional

>>> # Tally occurrences of words in a list
>>> cnt = Counter()
>>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
..     cnt[word] += 1
>>> cnt
Counter({'blue': 3, 'red': 2, 'green': 1})

>>> # Find the ten most common words in Hamlet
>>> import re
>>> words = re.findall(r'\w+', open('hamlet.txt').read().lower())
>>> Counter(words).most_common(10)
[('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631),
 ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]
6 telah ditambahkan.

Berubah di versi 3. 10. Dukungan argumen kata kunci telah ditambahkan.

orang tua

Properti mengembalikan yang baru yang berisi semua peta dalam contoh saat ini kecuali yang pertama. Ini berguna untuk melewatkan peta pertama dalam pencarian. Kasus penggunaan mirip dengan yang digunakan untuk kata kunci. Kasus penggunaan juga paralel dengan fungsi bawaan. Referensi ke

>>> c = Counter()                           # a new, empty counter
>>> c = Counter('gallahad')                 # a new counter from an iterable
>>> c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
>>> c = Counter(cats=4, dogs=8)             # a new counter from keyword args
_3 setara dengan.
>>> c = Counter()                           # a new, empty counter
>>> c = Counter('gallahad')                 # a new counter from an iterable
>>> c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
>>> c = Counter(cats=4, dogs=8)             # a new counter from keyword args
_4

Perhatikan, urutan iterasi a ditentukan dengan memindai pemetaan dari awal hingga akhir

>>> baseline = {'music': 'bach', 'art': 'rembrandt'}
>>> adjustments = {'art': 'van gogh', 'opera': 'carmen'}
>>> list(ChainMap(adjustments, baseline))
['music', 'art', 'opera']
_

Ini memberikan urutan yang sama dengan serangkaian panggilan yang dimulai dengan pemetaan terakhir

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']

Berubah di versi 3. 9. Menambahkan dukungan untuk

>>> c = Counter()                           # a new, empty counter
>>> c = Counter('gallahad')                 # a new counter from an iterable
>>> c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
>>> c = Counter(cats=4, dogs=8)             # a new counter from keyword args
7 dan
>>> c = Counter()                           # a new, empty counter
>>> c = Counter('gallahad')                 # a new counter from an iterable
>>> c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
>>> c = Counter(cats=4, dogs=8)             # a new counter from keyword args
8 operator, ditentukan dalam PEP 584.

Lihat juga

  • Kelas MultiContext dalam paket Enthought CodeTools memiliki opsi untuk mendukung penulisan ke pemetaan apa pun dalam rantai

  • Kelas Konteks Django untuk cetakan adalah rangkaian pemetaan hanya-baca. Ini juga menampilkan mendorong dan memunculkan konteks yang mirip dengan metode dan properti

  • Resep Nested Contexts memiliki opsi untuk mengontrol apakah penulisan dan mutasi lainnya hanya berlaku untuk pemetaan pertama atau untuk pemetaan apa pun dalam rantai

  • Versi Chainmap hanya-baca yang sangat disederhanakan

Contoh dan Resep

Bagian ini menunjukkan berbagai pendekatan untuk bekerja dengan peta berantai

Contoh simulasi rantai pencarian internal Python

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))

Contoh membiarkan argumen baris perintah yang ditentukan pengguna lebih diutamakan daripada variabel lingkungan yang pada gilirannya lebih diutamakan daripada nilai default

import os, argparse

defaults = {'color': 'red', 'user': 'guest'}

parser = argparse.ArgumentParser()
parser.add_argument('-u', '--user')
parser.add_argument('-c', '--color')
namespace = parser.parse_args()
command_line_args = {k: v for k, v in vars(namespace).items() if v is not None}

combined = ChainMap(command_line_args, os.environ, defaults)
print(combined['color'])
print(combined['user'])

Contoh pola untuk menggunakan kelas untuk mensimulasikan konteks bersarang

c = ChainMap()        # Create root context
d = c.new_child()     # Create nested child context
e = c.new_child()     # Child of c, independent from d
e.maps[0]             # Current context dictionary -- like Python's locals()
e.maps[-1]            # Root context -- like Python's globals()
e.parents             # Enclosing context chain -- like Python's nonlocals

d['x'] = 1            # Set value in current context
d['x']                # Get first key in the chain of contexts
del d['x']            # Delete from current context
list(d)               # All nested values
k in d                # Check all nested values
len(d)                # Number of nested values
d.items()             # All nested items
dict(d)               # Flatten into a regular dictionary

Kelas hanya membuat pembaruan (menulis dan menghapus) ke pemetaan pertama dalam rantai sementara pencarian akan mencari seluruh rantai. Namun, jika diinginkan penulisan dan penghapusan yang dalam, mudah untuk membuat subkelas yang memperbarui kunci yang ditemukan lebih dalam di rantai

class DeepChainMap(ChainMap):
    'Variant of ChainMap that allows direct updates to inner scopes'

    def __setitem__(self, key, value):
        for mapping in self.maps:
            if key in mapping:
                mapping[key] = value
                return
        self.maps[0][key] = value

    def __delitem__(self, key):
        for mapping in self.maps:
            if key in mapping:
                del mapping[key]
                return
        raise KeyError(key)

>>> d = DeepChainMap({'zebra': 'black'}, {'elephant': 'blue'}, {'lion': 'yellow'})
>>> d['lion'] = 'orange'         # update an existing key two levels down
>>> d['snake'] = 'red'           # new keys get added to the topmost dict
>>> del d['elephant']            # remove an existing key one level down
>>> d                            # display result
DeepChainMap({'zebra': 'black', 'snake': 'red'}, {}, {'lion': 'orange'})

objek

Alat penghitung disediakan untuk mendukung penghitungan yang nyaman dan cepat. Misalnya

>>> # Tally occurrences of words in a list
>>> cnt = Counter()
>>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
..     cnt[word] += 1
>>> cnt
Counter({'blue': 3, 'red': 2, 'green': 1})

>>> # Find the ten most common words in Hamlet
>>> import re
>>> words = re.findall(r'\w+', open('hamlet.txt').read().lower())
>>> Counter(words).most_common(10)
[('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631),
 ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]

kelas . Penghitung([iterable-or-mapping])

A adalah subkelas untuk menghitung objek hashable. Ini adalah kumpulan tempat elemen disimpan sebagai kunci kamus dan hitungannya disimpan sebagai nilai kamus. Hitungan diperbolehkan berupa nilai bilangan bulat apa pun termasuk hitungan nol atau negatif. Kelasnya mirip dengan tas atau multiset dalam bahasa lain

Elemen dihitung dari iterable atau diinisialisasi dari pemetaan lain (atau penghitung)

>>> c = Counter()                           # a new, empty counter
>>> c = Counter('gallahad')                 # a new counter from an iterable
>>> c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
>>> c = Counter(cats=4, dogs=8)             # a new counter from keyword args
_

Objek penghitung memiliki antarmuka kamus kecuali bahwa mereka mengembalikan hitungan nol untuk item yang hilang alih-alih menaikkan a

>>> c = Counter(['eggs', 'ham'])
>>> c['bacon']                              # count of a missing element is zero
0

Menyetel hitungan ke nol tidak menghapus elemen dari penghitung. Gunakan

>>> c = Counter(['eggs', 'ham'])
>>> c['bacon']                              # count of a missing element is zero
0
_9 untuk menghapus seluruhnya

>>> c['sausage'] = 0                        # counter entry with a zero count
>>> del c['sausage']                        # del actually removes the entry

Baru di versi 3. 1

Berubah di versi 3. 7. Sebagai subclass, mewarisi kemampuan untuk mengingat insertion order. Operasi matematika pada objek Penghitung juga menjaga ketertiban. Hasil diurutkan berdasarkan saat elemen pertama kali ditemukan di operan kiri dan kemudian berdasarkan urutan yang ditemui di operan kanan.

Objek penghitung mendukung metode tambahan di luar yang tersedia untuk semua kamus

elemen()

Kembalikan iterator pada elemen yang berulang setiap kali sebanyak hitungannya. Elemen dikembalikan dalam urutan pertama ditemui. Jika hitungan elemen kurang dari satu, akan mengabaikannya

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
0

paling_umum([n])

Kembalikan daftar n elemen yang paling umum dan jumlahnya dari yang paling umum hingga yang paling sedikit. Jika n dihilangkan atau

>>> c['sausage'] = 0                        # counter entry with a zero count
>>> del c['sausage']                        # del actually removes the entry
_3, mengembalikan semua elemen di counter. Elemen dengan jumlah yang sama diurutkan dalam urutan pertama ditemui

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
1

kurangi([iterable-or-mapping])

Elemen dikurangi dari iterable atau dari pemetaan lain (atau penghitung). Suka tetapi kurangi jumlah alih-alih menggantinya. Baik input dan output mungkin nol atau negatif

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
2

Baru di versi 3. 2

total()

Hitung jumlah hitungan

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
3

Baru di versi 3. 10

Metode kamus biasa tersedia untuk objek kecuali dua yang bekerja berbeda untuk penghitung

fromkeys(dapat diubah)

Metode kelas ini tidak diimplementasikan untuk objek

perbarui([iterable-or-mapping])

Elemen dihitung dari iterable atau ditambahkan dari pemetaan lain (atau penghitung). Suka tetapi menambahkan jumlah alih-alih menggantinya. Juga, iterable diharapkan menjadi urutan elemen, bukan urutan

>>> c['sausage'] = 0                        # counter entry with a zero count
>>> del c['sausage']                        # del actually removes the entry
9 pasang

Penghitung mendukung operator perbandingan yang kaya untuk hubungan kesetaraan, subset, dan superset.

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
00,
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
01,
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
02,
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
03,
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
04,
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
05. Semua tes tersebut memperlakukan elemen yang hilang sebagai memiliki hitungan nol sehingga
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
06 mengembalikan nilai true

Baru di versi 3. 10. Operasi perbandingan yang kaya telah ditambahkan.

Berubah di versi 3. 10. Dalam uji kesetaraan, elemen yang hilang dianggap memiliki jumlah nol. Sebelumnya,

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
07 dan
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
08 dianggap berbeda.

Pola umum untuk bekerja dengan objek

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
4

Beberapa operasi matematika disediakan untuk menggabungkan objek untuk menghasilkan multiset (pencacah yang memiliki jumlah lebih besar dari nol). Penjumlahan dan pengurangan menggabungkan penghitung dengan menambahkan atau mengurangi jumlah elemen yang sesuai. Persimpangan dan gabungan mengembalikan jumlah minimum dan maksimum yang sesuai. Kesetaraan dan inklusi membandingkan jumlah yang sesuai. Setiap operasi dapat menerima input dengan hitungan bertanda, tetapi output akan mengecualikan hasil dengan hitungan nol atau kurang

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
5

Penjumlahan dan pengurangan unary adalah jalan pintas untuk menambahkan penghitung kosong atau pengurangan dari penghitung kosong

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
6

Baru di versi 3. 3. Menambahkan dukungan untuk operasi unary plus, unary minus, dan in-place multiset.

Catatan

Penghitung terutama dirancang untuk bekerja dengan bilangan bulat positif untuk mewakili jumlah yang sedang berjalan; . Untuk membantu kasus penggunaan tersebut, bagian ini mendokumentasikan batasan rentang dan jenis minimum

  • Kelas itu sendiri adalah subkelas kamus tanpa batasan pada kunci dan nilainya. Nilai dimaksudkan sebagai angka yang mewakili jumlah, tetapi Anda dapat menyimpan apa pun di bidang nilai

  • Metode ini hanya mensyaratkan bahwa nilai dapat diurutkan

  • Untuk operasi di tempat seperti

    >>> combined = baseline.copy()
    >>> combined.update(adjustments)
    >>> list(combined)
    ['music', 'art', 'opera']
    
    _13, tipe nilai hanya perlu mendukung penambahan dan pengurangan. Jadi pecahan, float, dan desimal akan berfungsi dan nilai negatif didukung. Hal yang sama juga berlaku untuk dan yang memungkinkan nilai negatif dan nol untuk input dan output

  • Metode multiset dirancang hanya untuk kasus penggunaan dengan nilai positif. Input mungkin negatif atau nol, tetapi hanya output dengan nilai positif yang dibuat. Tidak ada batasan tipe, tetapi tipe nilai harus mendukung penambahan, pengurangan, dan perbandingan

  • Metode ini membutuhkan jumlah bilangan bulat. Ini mengabaikan jumlah nol dan negatif

Lihat juga

  • Kelas tas di Smalltalk

  • Entri Wikipedia untuk Multiset

  • Tutorial multiset C++ dengan contoh

  • Untuk operasi matematika pada multiset dan kasus penggunaannya, lihat Knuth, Donald. Seni Pemrograman Komputer Volume II, Bagian 4. 6. 3, Latihan 19

  • Untuk menghitung semua multiset yang berbeda dengan ukuran tertentu pada kumpulan elemen tertentu, lihat

    >>> combined = baseline.copy()
    >>> combined.update(adjustments)
    >>> list(combined)
    ['music', 'art', 'opera']
    
    7

objek

kelas . deque([dapat diubah[, maxlen]])

Mengembalikan objek deque baru yang diinisialisasi dari kiri ke kanan (menggunakan ) dengan data dari iterable. Jika iterable tidak ditentukan, deque baru kosong

Deques adalah generalisasi tumpukan dan antrian (namanya diucapkan "deck" dan merupakan kependekan dari "double-ended queue"). Deques mendukung thread-safe, penambahan memori yang efisien dan muncul dari kedua sisi deque dengan kinerja O(1) yang kira-kira sama di kedua arah

Meskipun objek mendukung operasi serupa, mereka dioptimalkan untuk operasi dengan panjang tetap yang cepat dan menimbulkan biaya pemindahan memori O(n) untuk operasi

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
21 dan
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
22 yang mengubah ukuran dan posisi representasi data yang mendasarinya

Jika maxlen tidak ditentukan atau

>>> c['sausage'] = 0                        # counter entry with a zero count
>>> del c['sausage']                        # del actually removes the entry
3, deques dapat tumbuh dengan panjang yang sewenang-wenang. Jika tidak, deque dibatasi hingga panjang maksimum yang ditentukan. Setelah deque panjang terbatas penuh, saat item baru ditambahkan, jumlah item yang sesuai akan dibuang dari ujung yang berlawanan. Deque panjang terikat menyediakan fungsionalitas yang mirip dengan filter
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
24 di Unix. Mereka juga berguna untuk melacak transaksi dan kumpulan data lainnya di mana hanya aktivitas terbaru yang menarik

Objek deque mendukung metode berikut

tambahkan(x)

Tambahkan x ke sisi kanan deque

appendleft(x)

Tambahkan x ke sisi kiri deque

jelas()

Hapus semua elemen dari deque meninggalkannya dengan panjang 0

salin()

Buat salinan deque yang dangkal

Baru di versi 3. 5

hitung(x)

Hitung jumlah elemen deque sama dengan x

Baru di versi 3. 2

memperpanjang(dapat diubah)

Perluas sisi kanan deque dengan menambahkan elemen dari argumen iterable

extendleft(dapat diubah)

Perluas sisi kiri deque dengan menambahkan elemen dari iterable. Perhatikan, rangkaian penambahan kiri menghasilkan pembalikan urutan elemen dalam argumen iterable

indeks(x[ , start[, stop]])

Kembalikan posisi x di deque (pada atau setelah indeks mulai dan sebelum indeks berhenti). Mengembalikan pertandingan atau kenaikan pertama jika tidak ditemukan

Baru di versi 3. 5

masukkan(i , x)

Masukkan x ke dalam deque pada posisi i

Jika penyisipan akan menyebabkan deque yang dibatasi tumbuh melebihi maxlen, an dinaikkan

Baru di versi 3. 5

pop()

Hapus dan kembalikan elemen dari sisi kanan deque. Jika tidak ada elemen, munculkan an

popleft()

Hapus dan kembalikan elemen dari sisi kiri deque. Jika tidak ada elemen, munculkan an

hapus(nilai)

Hapus kemunculan nilai pertama. Jika tidak ditemukan, munculkan a

terbalik()

Balikkan elemen deque di tempat lalu kembalikan

>>> c['sausage'] = 0                        # counter entry with a zero count
>>> del c['sausage']                        # del actually removes the entry
3

Baru di versi 3. 2

putar(n=1)

Putar deque n langkah ke kanan. Jika n negatif, putar ke kiri

Saat deque tidak kosong, memutar satu langkah ke kanan setara dengan

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
31, dan memutar satu langkah ke kiri setara dengan
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
32

Objek Deque juga menyediakan satu atribut read-only

maxlen

Ukuran maksimum deque atau

>>> c['sausage'] = 0                        # counter entry with a zero count
>>> del c['sausage']                        # del actually removes the entry
3 jika tidak terikat

Baru di versi 3. 1

Selain yang di atas, deques mendukung iterasi, pengawetan,

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
34,
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
35,
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
36,
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
37, pengujian keanggotaan dengan operator, dan referensi subskrip seperti
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
39 untuk mengakses elemen pertama. Akses yang diindeks adalah O(1) di kedua ujungnya tetapi melambat menjadi O(n) di tengah. Untuk akses acak cepat, gunakan daftar sebagai gantinya

Mulai dari versi 3. 5, deques mendukung

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
_40,
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
41, dan
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
42

Contoh

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
_8

Resep

Bagian ini menunjukkan berbagai pendekatan untuk bekerja dengan deques

Deque panjang terikat menyediakan fungsionalitas yang mirip dengan filter

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
24 di Unix

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
_9

Pendekatan lain untuk menggunakan deques adalah mempertahankan urutan elemen yang baru ditambahkan dengan menambahkan ke kanan dan muncul ke kiri

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
_0

Penjadwal round-robin dapat diimplementasikan dengan input iterator yang disimpan di a. Nilai dihasilkan dari iterator aktif di posisi nol. Jika iterator itu habis, itu bisa dihapus dengan ;

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
_1

Metode ini menyediakan cara untuk mengimplementasikan pemotongan dan penghapusan. Misalnya, implementasi Python murni dari

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
_50 bergantung pada metode
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
47 untuk memposisikan elemen yang akan dimunculkan

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
_2

Untuk mengimplementasikan slicing, gunakan pendekatan serupa yang menerapkan untuk membawa elemen target ke sisi kiri deque. Hapus entri lama dengan , tambahkan entri baru dengan , lalu balikkan rotasi. Dengan variasi kecil pada pendekatan itu, mudah untuk menerapkan manipulasi tumpukan gaya Forth seperti

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
56,
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
57,
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
58,
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
59,
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
60,
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
61, dan
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
62

objek

kelas . defaultdict(default_factory=Tidak ada , /[, ...])

Kembalikan objek seperti kamus baru. adalah subclass dari built-in class. Itu menimpa satu metode dan menambahkan satu variabel instan yang dapat ditulis. Fungsi yang tersisa sama dengan kelas dan tidak didokumentasikan di sini

Argumen pertama memberikan nilai awal untuk atribut; . Semua argumen yang tersisa diperlakukan sama seperti jika diteruskan ke konstruktor, termasuk argumen kata kunci

objek mendukung metode berikut selain operasi standar

__hilang__(kunci)

Jika atributnya adalah

>>> c['sausage'] = 0                        # counter entry with a zero count
>>> del c['sausage']                        # del actually removes the entry
_3, ini menimbulkan pengecualian dengan kunci sebagai argumen

Jika bukan

>>> c['sausage'] = 0                        # counter entry with a zero count
>>> del c['sausage']                        # del actually removes the entry
3, itu dipanggil tanpa argumen untuk memberikan nilai default untuk kunci yang diberikan, nilai ini dimasukkan ke dalam kamus untuk kunci, dan dikembalikan

Jika panggilan memunculkan pengecualian, pengecualian ini disebarkan tanpa perubahan

Metode ini dipanggil dengan metode

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
_78 kelas ketika kunci yang diminta tidak ditemukan;

Perhatikan bahwa tidak dipanggil untuk operasi apa pun selain ________7______78. Ini berarti

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
_83 akan, seperti kamus normal, mengembalikan
>>> c['sausage'] = 0                        # counter entry with a zero count
>>> del c['sausage']                        # del actually removes the entry
3 sebagai default daripada menggunakan

objek mendukung variabel instan berikut

default_factory

Atribut ini digunakan dengan metode;

Berubah di versi 3. 9. Menambahkan operator gabungan (

>>> c = Counter()                           # a new, empty counter
>>> c = Counter('gallahad')                 # a new counter from an iterable
>>> c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
>>> c = Counter(cats=4, dogs=8)             # a new counter from keyword args
7) dan pembaruan (
>>> c = Counter()                           # a new, empty counter
>>> c = Counter('gallahad')                 # a new counter from an iterable
>>> c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
>>> c = Counter(cats=4, dogs=8)             # a new counter from keyword args
8), ditentukan dalam PEP 584.

Contoh

Menggunakan sebagai , mudah untuk mengelompokkan urutan pasangan kunci-nilai ke dalam kamus daftar

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
_3

Saat setiap kunci ditemui untuk pertama kalinya, itu belum ada dalam pemetaan; . Operasi

>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
_96 kemudian melampirkan nilai ke daftar baru. Saat kunci ditemukan lagi, pencarian berjalan normal (mengembalikan daftar untuk kunci itu) dan operasi
>>> combined = baseline.copy()
>>> combined.update(adjustments)
>>> list(combined)
['music', 'art', 'opera']
96 menambahkan nilai lain ke daftar. Teknik ini lebih sederhana dan lebih cepat daripada menggunakan teknik yang setara

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
_4

Menyetel ke membuat berguna untuk menghitung (seperti tas atau multiset dalam bahasa lain)

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
_5

Ketika sebuah huruf pertama kali ditemukan, huruf itu hilang dari pemetaan, sehingga fungsi tersebut memanggil untuk memberikan hitungan default nol. Operasi kenaikan kemudian membangun hitungan untuk setiap huruf

Fungsi yang selalu mengembalikan nol hanyalah kasus khusus dari fungsi konstanta. Cara yang lebih cepat dan lebih fleksibel untuk membuat fungsi konstanta adalah dengan menggunakan fungsi lambda yang dapat memberikan nilai konstanta apa pun (bukan hanya nol)

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
_6

Mengatur ke membuat berguna untuk membuat kamus kumpulan

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
_7

Fungsi Pabrik untuk Tuple dengan Bidang Bernama

Named tuple menetapkan arti untuk setiap posisi dalam tuple dan memungkinkan kode yang lebih mudah dibaca dan mendokumentasikan diri. Mereka dapat digunakan di mana pun tupel biasa digunakan, dan mereka menambahkan kemampuan untuk mengakses bidang berdasarkan nama, bukan indeks posisi

koleksi. namedtuple(typename , field_names, *, rename=False, defaults=None, module=None)

Mengembalikan subclass tuple baru bernama typename. Subkelas baru digunakan untuk membuat objek mirip tuple yang memiliki bidang yang dapat diakses oleh pencarian atribut serta dapat diindeks dan diubah. Instance subclass juga memiliki docstring yang berguna (dengan nama jenis dan nama_bidang) dan metode

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
09 yang berguna yang mencantumkan konten tupel dalam format
import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
10

Nama_bidang adalah urutan string seperti

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
11. Alternatifnya, nama_bidang dapat berupa string tunggal dengan setiap nama bidang dipisahkan dengan spasi putih dan/atau koma, misalnya
import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
12 atau
import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
13

Setiap pengenal Python yang valid dapat digunakan untuk nama bidang kecuali untuk nama yang dimulai dengan garis bawah. Pengidentifikasi yang valid terdiri dari huruf, angka, dan garis bawah tetapi tidak dimulai dengan angka atau garis bawah dan tidak dapat berupa kelas, untuk, pengembalian, global, lulus, atau menaikkan

Jika ganti nama benar, nama bidang yang tidak valid secara otomatis diganti dengan nama posisi. Misalnya,

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
_15 dikonversi menjadi
import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
16, menghilangkan kata kunci
import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
17 dan nama bidang duplikat
import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
18

default dapat berupa

>>> c['sausage'] = 0                        # counter entry with a zero count
>>> del c['sausage']                        # del actually removes the entry
_3 atau salah satu dari nilai default. Karena bidang dengan nilai default harus muncul setelah bidang apa pun tanpa nilai default, nilai default diterapkan ke parameter paling kanan. Misalnya, jika nama bidang adalah
import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
20 dan defaultnya adalah
import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
21, maka
import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
22 akan menjadi argumen yang diperlukan,
import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
23 akan default ke
import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
24, dan
import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
25 akan default ke
import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
26

Jika modul didefinisikan, atribut

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
_27 dari tuple bernama diatur ke nilai itu

Instance Tuple bernama tidak memiliki kamus per-instance, sehingga ringan dan tidak memerlukan memori lebih banyak daripada tuple biasa

Untuk mendukung pengawetan, kelas tuple bernama harus ditugaskan ke variabel yang cocok dengan nama jenis

Berubah di versi 3. 1. Menambahkan dukungan untuk mengganti nama.

Berubah di versi 3. 6. Parameter verbose dan rename menjadi.

Berubah di versi 3. 6. Menambahkan parameter modul.

Berubah di versi 3. 7. Menghapus parameter verbose dan atribut

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
28.

Berubah di versi 3. 7. Menambahkan parameter default dan atribut ________10______29.

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
_8

Tupel bernama sangat berguna untuk menetapkan nama bidang ke tupel hasil yang dikembalikan oleh atau modul

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
_9

Selain metode yang diwariskan dari tupel, tupel bernama mendukung tiga metode tambahan dan dua atribut. Untuk mencegah konflik dengan nama bidang, nama metode dan atribut dimulai dengan garis bawah

classmethod somenamedtuple. _make(dapat diubah)

Metode kelas yang membuat instance baru dari urutan yang ada atau iterable

import os, argparse

defaults = {'color': 'red', 'user': 'guest'}

parser = argparse.ArgumentParser()
parser.add_argument('-u', '--user')
parser.add_argument('-c', '--color')
namespace = parser.parse_args()
command_line_args = {k: v for k, v in vars(namespace).items() if v is not None}

combined = ChainMap(command_line_args, os.environ, defaults)
print(combined['color'])
print(combined['user'])
_0

somenamedtuple. _asdict()

Kembalikan yang baru yang memetakan nama bidang ke nilai yang sesuai

import os, argparse

defaults = {'color': 'red', 'user': 'guest'}

parser = argparse.ArgumentParser()
parser.add_argument('-u', '--user')
parser.add_argument('-c', '--color')
namespace = parser.parse_args()
command_line_args = {k: v for k, v in vars(namespace).items() if v is not None}

combined = ChainMap(command_line_args, os.environ, defaults)
print(combined['color'])
print(combined['user'])
_1

Berubah di versi 3. 1. Mengembalikan an bukan reguler.

Berubah di versi 3. 8. Mengembalikan reguler, bukan an. Pada Python 3. 7, diktat biasa dijamin pasti bisa dipesan. Jika fitur tambahan diperlukan, remediasi yang disarankan adalah memberikan hasil ke jenis yang diinginkan.

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
_38.

somenamedtuple. _replace(**kwargs)

Mengembalikan contoh baru dari tupel bernama yang mengganti bidang yang ditentukan dengan nilai baru

import os, argparse

defaults = {'color': 'red', 'user': 'guest'}

parser = argparse.ArgumentParser()
parser.add_argument('-u', '--user')
parser.add_argument('-c', '--color')
namespace = parser.parse_args()
command_line_args = {k: v for k, v in vars(namespace).items() if v is not None}

combined = ChainMap(command_line_args, os.environ, defaults)
print(combined['color'])
print(combined['user'])
_2

somenamedtuple. _bidang

Tupel string yang mencantumkan nama bidang. Berguna untuk introspeksi dan untuk membuat tipe tuple bernama baru dari tuple bernama yang ada

import os, argparse

defaults = {'color': 'red', 'user': 'guest'}

parser = argparse.ArgumentParser()
parser.add_argument('-u', '--user')
parser.add_argument('-c', '--color')
namespace = parser.parse_args()
command_line_args = {k: v for k, v in vars(namespace).items() if v is not None}

combined = ChainMap(command_line_args, os.environ, defaults)
print(combined['color'])
print(combined['user'])
_3

somenamedtuple. _field_defaults

Nama bidang pemetaan kamus ke nilai default

import os, argparse

defaults = {'color': 'red', 'user': 'guest'}

parser = argparse.ArgumentParser()
parser.add_argument('-u', '--user')
parser.add_argument('-c', '--color')
namespace = parser.parse_args()
command_line_args = {k: v for k, v in vars(namespace).items() if v is not None}

combined = ChainMap(command_line_args, os.environ, defaults)
print(combined['color'])
print(combined['user'])
_4

Untuk mengambil bidang yang namanya disimpan dalam string, gunakan fungsi

import os, argparse

defaults = {'color': 'red', 'user': 'guest'}

parser = argparse.ArgumentParser()
parser.add_argument('-u', '--user')
parser.add_argument('-c', '--color')
namespace = parser.parse_args()
command_line_args = {k: v for k, v in vars(namespace).items() if v is not None}

combined = ChainMap(command_line_args, os.environ, defaults)
print(combined['color'])
print(combined['user'])
_5

Untuk mengonversi kamus menjadi tuple bernama, gunakan operator bintang ganda (seperti yang dijelaskan dalam )

import os, argparse

defaults = {'color': 'red', 'user': 'guest'}

parser = argparse.ArgumentParser()
parser.add_argument('-u', '--user')
parser.add_argument('-c', '--color')
namespace = parser.parse_args()
command_line_args = {k: v for k, v in vars(namespace).items() if v is not None}

combined = ChainMap(command_line_args, os.environ, defaults)
print(combined['color'])
print(combined['user'])
_6

Karena tuple bernama adalah kelas Python biasa, mudah untuk menambah atau mengubah fungsionalitas dengan subkelas. Berikut adalah cara menambahkan kolom kalkulasi dan format cetak dengan lebar tetap

import os, argparse

defaults = {'color': 'red', 'user': 'guest'}

parser = argparse.ArgumentParser()
parser.add_argument('-u', '--user')
parser.add_argument('-c', '--color')
namespace = parser.parse_args()
command_line_args = {k: v for k, v in vars(namespace).items() if v is not None}

combined = ChainMap(command_line_args, os.environ, defaults)
print(combined['color'])
print(combined['user'])
_7

Subclass yang ditunjukkan di atas menyetel

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
40 ke tuple kosong. Ini membantu menjaga persyaratan memori tetap rendah dengan mencegah pembuatan kamus instan

Subkelas tidak berguna untuk menambahkan bidang baru yang disimpan. Sebagai gantinya, cukup buat tipe tuple bernama baru dari atribut

import os, argparse

defaults = {'color': 'red', 'user': 'guest'}

parser = argparse.ArgumentParser()
parser.add_argument('-u', '--user')
parser.add_argument('-c', '--color')
namespace = parser.parse_args()
command_line_args = {k: v for k, v in vars(namespace).items() if v is not None}

combined = ChainMap(command_line_args, os.environ, defaults)
print(combined['color'])
print(combined['user'])
_8

Docstrings dapat dikustomisasi dengan membuat penetapan langsung ke bidang

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
42

import os, argparse

defaults = {'color': 'red', 'user': 'guest'}

parser = argparse.ArgumentParser()
parser.add_argument('-u', '--user')
parser.add_argument('-c', '--color')
namespace = parser.parse_args()
command_line_args = {k: v for k, v in vars(namespace).items() if v is not None}

combined = ChainMap(command_line_args, os.environ, defaults)
print(combined['color'])
print(combined['user'])
_9

Berubah di versi 3. 5. Dokumen properti menjadi dapat ditulisi.

Lihat juga

  • Lihat cara menambahkan petunjuk jenis untuk tupel bernama. Ini juga memberikan notasi elegan menggunakan kata kunci

    c = ChainMap()        # Create root context
    d = c.new_child()     # Create nested child context
    e = c.new_child()     # Child of c, independent from d
    e.maps[0]             # Current context dictionary -- like Python's locals()
    e.maps[-1]            # Root context -- like Python's globals()
    e.parents             # Enclosing context chain -- like Python's nonlocals
    
    d['x'] = 1            # Set value in current context
    d['x']                # Get first key in the chain of contexts
    del d['x']            # Delete from current context
    list(d)               # All nested values
    k in d                # Check all nested values
    len(d)                # Number of nested values
    d.items()             # All nested items
    dict(d)               # Flatten into a regular dictionary
    
    0

  • Lihat ruang nama yang bisa berubah berdasarkan kamus yang mendasarinya, bukan tuple

  • Modul ini menyediakan dekorator dan fungsi untuk secara otomatis menambahkan metode khusus yang dihasilkan ke kelas yang ditentukan pengguna

objek

Kamus yang dipesan sama seperti kamus biasa tetapi memiliki beberapa kemampuan tambahan yang berkaitan dengan operasi pemesanan. Mereka menjadi kurang penting sekarang karena kelas bawaan memperoleh kemampuan untuk mengingat urutan penyisipan (perilaku baru ini dijamin dalam Python 3. 7)

Beberapa perbedaan dari masih tetap ada

  • Reguler dirancang untuk menjadi sangat baik dalam operasi pemetaan. Urutan penyisipan pelacakan bersifat sekunder

  • Itu dirancang untuk menjadi baik dalam penataan ulang operasi. Efisiensi ruang, kecepatan iterasi, dan kinerja operasi pembaruan adalah nomor dua

  • Algoritme dapat menangani operasi pemesanan ulang yang sering lebih baik daripada. Seperti yang ditunjukkan pada resep di bawah ini, ini membuatnya cocok untuk mengimplementasikan berbagai jenis cache LRU

  • Operasi kesetaraan untuk memeriksa urutan pencocokan

    Seorang reguler dapat meniru tes persamaan sensitif pesanan dengan

    import builtins
    pylookup = ChainMap(locals(), globals(), vars(builtins))
    
    56

  • Metode

    import builtins
    pylookup = ChainMap(locals(), globals(), vars(builtins))
    
    _57 memiliki tanda tangan yang berbeda. Itu menerima argumen opsional untuk menentukan item mana yang muncul

    Seorang reguler dapat meniru

    import builtins
    pylookup = ChainMap(locals(), globals(), vars(builtins))
    
    60 OrderedDict dengan
    import builtins
    pylookup = ChainMap(locals(), globals(), vars(builtins))
    
    61 yang dijamin akan memunculkan item paling kanan (terakhir)

    Regular dapat meniru

    import builtins
    pylookup = ChainMap(locals(), globals(), vars(builtins))
    
    63 OrderedDict dengan
    import builtins
    pylookup = ChainMap(locals(), globals(), vars(builtins))
    
    64 yang akan mengembalikan dan menghapus item paling kiri (pertama) jika ada

  • memiliki metode

    import builtins
    pylookup = ChainMap(locals(), globals(), vars(builtins))
    
    _66 untuk memposisikan ulang elemen secara efisien ke titik akhir

    Regular dapat meniru

    import builtins
    pylookup = ChainMap(locals(), globals(), vars(builtins))
    
    68 OrderedDict dengan
    import builtins
    pylookup = ChainMap(locals(), globals(), vars(builtins))
    
    69 yang akan memindahkan kunci dan nilai terkaitnya ke posisi paling kanan (terakhir)

    Reguler tidak memiliki padanan efisien untuk

    import builtins
    pylookup = ChainMap(locals(), globals(), vars(builtins))
    
    71 OrderedDict yang memindahkan kunci dan nilai terkaitnya ke posisi paling kiri (pertama)

  • Sampai Python 3. 8, tidak memiliki metode

    import builtins
    pylookup = ChainMap(locals(), globals(), vars(builtins))
    
    _73

kelas . OrderedDict([item])

Mengembalikan turunan dari subkelas yang memiliki metode khusus untuk mengatur ulang urutan kamus

Baru di versi 3. 1

popitem(terakhir=Benar)

Metode untuk kamus terurut mengembalikan dan menghapus pasangan (kunci, nilai). Pasangan dikembalikan dalam urutan LIFO jika yang terakhir benar atau urutan FIFO jika salah

move_to_end(kunci , terakhir=True)

Pindahkan kunci yang ada ke salah satu ujung kamus yang dipesan. Item dipindahkan ke ujung kanan jika yang terakhir benar (default) atau ke awal jika yang terakhir salah. Menaikkan jika kunci tidak ada

c = ChainMap()        # Create root context
d = c.new_child()     # Create nested child context
e = c.new_child()     # Child of c, independent from d
e.maps[0]             # Current context dictionary -- like Python's locals()
e.maps[-1]            # Root context -- like Python's globals()
e.parents             # Enclosing context chain -- like Python's nonlocals

d['x'] = 1            # Set value in current context
d['x']                # Get first key in the chain of contexts
del d['x']            # Delete from current context
list(d)               # All nested values
k in d                # Check all nested values
len(d)                # Number of nested values
d.items()             # All nested items
dict(d)               # Flatten into a regular dictionary
1

Baru di versi 3. 2

Selain metode pemetaan biasa, kamus yang dipesan juga mendukung penggunaan iterasi terbalik

Tes kesetaraan antar objek sensitif terhadap urutan dan diimplementasikan sebagai

import builtins
pylookup = ChainMap(locals(), globals(), vars(builtins))
79. Tes kesetaraan antara objek dan objek lain tidak sensitif terhadap urutan seperti kamus biasa. Ini memungkinkan objek untuk diganti di mana pun kamus biasa digunakan

Berubah di versi 3. 5. Item, kunci, dan nilai sekarang mendukung penggunaan iterasi terbalik.

Berubah di versi 3. 6. Dengan diterimanya PEP 468, urutan dipertahankan untuk argumen kata kunci yang diteruskan ke konstruktor dan metode

>>> # Tally occurrences of words in a list
>>> cnt = Counter()
>>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
..     cnt[word] += 1
>>> cnt
Counter({'blue': 3, 'red': 2, 'green': 1})

>>> # Find the ten most common words in Hamlet
>>> import re
>>> words = re.findall(r'\w+', open('hamlet.txt').read().lower())
>>> Counter(words).most_common(10)
[('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631),
 ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]
1-nya.

Berubah di versi 3. 9. Menambahkan operator gabungan (

>>> c = Counter()                           # a new, empty counter
>>> c = Counter('gallahad')                 # a new counter from an iterable
>>> c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
>>> c = Counter(cats=4, dogs=8)             # a new counter from keyword args
7) dan pembaruan (
>>> c = Counter()                           # a new, empty counter
>>> c = Counter('gallahad')                 # a new counter from an iterable
>>> c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
>>> c = Counter(cats=4, dogs=8)             # a new counter from keyword args
8), ditentukan dalam PEP 584.

Contoh dan Resep

Sangat mudah untuk membuat varian kamus terurut yang mengingat urutan kunci terakhir dimasukkan. Jika entri baru menimpa entri yang sudah ada, posisi penyisipan awal diubah dan dipindahkan ke akhir

c = ChainMap()        # Create root context
d = c.new_child()     # Create nested child context
e = c.new_child()     # Child of c, independent from d
e.maps[0]             # Current context dictionary -- like Python's locals()
e.maps[-1]            # Root context -- like Python's globals()
e.parents             # Enclosing context chain -- like Python's nonlocals

d['x'] = 1            # Set value in current context
d['x']                # Get first key in the chain of contexts
del d['x']            # Delete from current context
list(d)               # All nested values
k in d                # Check all nested values
len(d)                # Number of nested values
d.items()             # All nested items
dict(d)               # Flatten into a regular dictionary
2

An juga akan berguna untuk mengimplementasikan varian dari

c = ChainMap()        # Create root context
d = c.new_child()     # Create nested child context
e = c.new_child()     # Child of c, independent from d
e.maps[0]             # Current context dictionary -- like Python's locals()
e.maps[-1]            # Root context -- like Python's globals()
e.parents             # Enclosing context chain -- like Python's nonlocals

d['x'] = 1            # Set value in current context
d['x']                # Get first key in the chain of contexts
del d['x']            # Delete from current context
list(d)               # All nested values
k in d                # Check all nested values
len(d)                # Number of nested values
d.items()             # All nested items
dict(d)               # Flatten into a regular dictionary
3

c = ChainMap()        # Create root context
d = c.new_child()     # Create nested child context
e = c.new_child()     # Child of c, independent from d
e.maps[0]             # Current context dictionary -- like Python's locals()
e.maps[-1]            # Root context -- like Python's globals()
e.parents             # Enclosing context chain -- like Python's nonlocals

d['x'] = 1            # Set value in current context
d['x']                # Get first key in the chain of contexts
del d['x']            # Delete from current context
list(d)               # All nested values
k in d                # Check all nested values
len(d)                # Number of nested values
d.items()             # All nested items
dict(d)               # Flatten into a regular dictionary
4

objek

Kelas, bertindak sebagai pembungkus di sekitar objek kamus. Kebutuhan akan kelas ini sebagian telah digantikan oleh kemampuan untuk membuat subkelas langsung dari ;

kelas . UserDict([data awal])

Kelas yang mensimulasikan kamus. Konten instance disimpan dalam kamus biasa, yang dapat diakses melalui atribut instance. Jika data awal disediakan, diinisialisasi dengan isinya;

Selain mendukung metode dan operasi string, instance menyediakan atribut berikut

Apa batasan kamus dengan Python?

Namun, ada beberapa batasan yang harus dipatuhi kunci kamus. Pertama, kunci tertentu dapat muncul di kamus hanya sekali . Kunci duplikat tidak diperbolehkan. Kamus memetakan setiap kunci ke nilai yang sesuai, jadi tidak masuk akal untuk memetakan kunci tertentu lebih dari satu kali.

Berapa ukuran kamus dengan Python?

ukuran a = 196880 byte . Yang pertama memiliki 2000 kunci dan yang kedua memiliki 2 kunci dan masing-masing memiliki dict dengan 1000 kunci.

Apakah kamus Python memiliki panjang?

Untuk menghitung panjang kamus, kita bisa menggunakan metode len() bawaan Python . Metode len() mengembalikan jumlah kunci dalam kamus Python.

Berapa banyak data yang dapat disimpan oleh kamus Python?

Itu adalah batasan lingkungan Anda dan tidak ada hubungannya dengan kamus Python. Jadi jawaban untuk pertanyaan Anda adalah. Kamus python dapat menampung sebanyak lingkungan Anda mengizinkannya . Simpan jawaban ini.