Rumah  >  Soal Jawab  >  teks badan

python - 如何为一个dict字典进行多层级赋值?

ringa_leeringa_lee2740 hari yang lalu1472

membalas semua(2)saya akan balas

  • 大家讲道理

    大家讲道理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

    balas
    0
  • PHP中文网

    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

    balas
    0
  • Batalbalas