Rumah > Soal Jawab > teks badan
大家讲道理2017-04-18 10:09:26
Anda boleh melaksanakan struktur ini sendiri.
Dalam contoh berikut, AutoVivification mewarisi daripada dict
class AutoVivification(dict):
"""Implementation of perl's autovivification feature."""
def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
value = self[item] = type(self)()
return value
Kita boleh menggunakan AutoVivification seperti ini:
item = AutoVivification()
item['20161101']["age"] = 20
item['20161102']['num'] = 30
print item
Output:
{'20161101': {'age': 20}, '20161102': {'num': 30}}
Selain itu, terdapat satu lagi kaedah pelaksanaan AutoVivification, iaitu membebankan secara langsung __missing__
kaedah ajaib dict. Anggap ia sebagai lanjutan.
class AutoVivification(dict):
"""Implementation of perl's autovivification feature."""
def __missing__(self, key):
value = self[key] = type(self)()
return value
Satu lagi, versi selepas Python 2.5 menambah jenis collections.defaultdict
, yang boleh menyesuaikan jenis dict yang lebih berskala. Dokumen
menyatakan bahawa prinsip pelaksanaan adalah untuk membebankan kaedah __missing__
terlebih dahulu. AutoVivification juga boleh dinyatakan seperti ini:
item = defaultdict(dict) # 其实现与AutoVivification的实现完全一样
item['20161101']["age"] = 20
item['20161102']['num'] = 30
print item
defaultdict membina jenis dict yang parameter pertamanya ialah default_factory apabila __missing__
dipanggil, nilai pulangan dibina menggunakan default_factory.
Lagi contoh lalai
PHP中文网2017-04-18 10:09:26
Saya akan melampirkan penggunaan pakej defaultdict:
from collections import defaultdict
item = defaultdict(dict)
item['20161101']['age'] = 20
print item
Output:
defaultdict(<type 'dict'>, {'20161101': {'age': 20}})
Dengan cara ini anda boleh mencapai kesan yang diingini,
Tambahan:
defaultdict() menerima parameter lalai, yang boleh menjadi nama jenis atau mana-mana fungsi boleh panggil tanpa parameter
Ini sangat berguna
item = defaultdict(lambda:0)
print item['num']
Output:
0