Kami menukar jujukan berikut kepada jenis dict.
lst = [('a', 1), ('b', 2), ('c', 3)]
Kaedah penulisan biasa
for k, v in lst: dic[k] = v
Kaedah penulisan yang lebih pythonic
Gunakan terbitan kamus untuk menjana kamus dengan cepat.
{k: v for k, v in lst}
Apabila kunci yang ditentukan tidak wujud, tetapkan nilai kepada 0.
Kaedah penulisan biasa
if key not in dct: dct[key] = 0
Kaedah tulisan Phytonik
dct[key] = dct.get(key, 0)
Kaedah penulisan biasa
dic = {'Python': 1, 'Java': 2} new_dic = {} for k, v in dic.items(): new_dic[v] = k
Lebih banyak tulisan pythonic
dic = {'Python': 1, 'Java': 2} new_dic = {v: k for k, v in dic.items()}
Data sampel
lst = [('a', 1), ('b', 2), ('c', 3)] dic = {'a': [0]}
Jika kita perlu mengemas kini data dalam dic berdasarkan lst, when key Jika wujud, nilai akan ditambahkan pada penghujung jujukan asal, jika tidak nilai akan dimulakan dan disimpan dalam jujukan.
Tulisan biasa
for key, value in lst: if key in dic: dic[key].append(value) else: dic[key] = [value]
Lebih banyak tulisan pythonic
for (key, value) in lst: group = dic.setdefault(key, []) group.append(value) # dic:{'a': [0, 1], 'b': [2], 'c': [3]}
setdefault(kunci, lalai) akan terlebih dahulu menentukan sama ada kunci itu wujud, dan jika ia berlaku, ia akan kembalikan dct[key ], jika ia tidak wujud, tetapkan dct[key] kepada [] dan kembalikan.
Jika sekarang kita perlu mendapatkan maklumat pemetaan persimpangan kunci dua kamus.
Kaedah penulisan biasa
dic1 = {'Python': 1, 'Java': 2, 'C': 3} dic2 = {'Python': 3, 'Java': 2, 'C++': 1} new_dic = {} for k, v in dic1.items(): if k in dic2.keys(): new_dic[k] = v print(new_dic) # {'Python': 1, 'Java': 2}
Kaedah penulisan yang lebih pythonic
dic1 = {'Python': 1, 'Java': 2, 'C': 3} dic2 = {'Python': 3, 'Java': 2, 'C++': 1} print({k: dic1[k] for k in dic1.keys() & dic2.keys()}) # {'Python': 1, 'Java': 2}
Dic1.keys() & dic2.keys() di sini gunakan keys( ) performs set operasi, dan item() juga boleh melakukan operasi yang ditetapkan.
Jika sekarang kita ingin mendapatkan bahagian kunci dan nilai yang sama dalam dua kamus
dic1 = {'Python': 1, 'Java': 2, 'C': 3} dic2 = {'Python': 3, 'Java': 2, 'C++': 1} print(dic1.items() & dic2.items()) # {('Java', 2)}
Fleksibel gunakan ciri kunci dan operasi set item() untuk mengekstrak kandungan yang kita inginkan dengan cepat .
Gunakan fungsi sorted() untuk mengisih kunci atau nilai dengan cepat.
dic = {'a': 2, 'b': 1, 'c': 3, 'd': 0} lst1 = sorted(dic.items(), key=lambda x: x[0], reverse=False) # [('a', 2), ('b', 1), ('c', 3), ('d', 0)] lst2 = sorted(dic.items(), key=lambda x: x[1], reverse=False) # [('d', 0), ('b', 1), ('a', 2), ('c', 3)] print('按照键降序:', {key: value for key, value in lst1}) print('按照值降序:', {key: value for key, value in lst2}) # 按照键降序: {'a': 2, 'b': 1, 'c': 3, 'd': 0} # 按照值降序: {'d': 0, 'b': 1, 'a': 2, 'c': 3}
Jika urutan mengandungi berbilang kamus, kamus ini kini mesti diisih mengikut syarat. Ini juga boleh dicapai menggunakan fungsi sorted().
dict_list = [ {'letter': 'B', 'number': '2'}, {'letter': 'A', 'number': '3'}, {'letter': 'B', 'number': '1'} ] # 按 letter 排序 print(sorted(dict_list, key=lambda dic: dic['letter'])) # 按 letter, number 排序 print(sorted(dict_list, key=lambda dic: (dic['letter'], dic['number']))) # [{'letter': 'A', 'number': '3'}, {'letter': 'B', 'number': '2'}, {'letter': 'B', 'number': '1'}] # [{'letter': 'A', 'number': '3'}, {'letter': 'B', 'number': '1'}, {'letter': 'B', 'number': '2'}]
Sudah tentu, jika anda tahu itemgetter(), kod di atas boleh ditukar dan kelajuan pelaksanaan akan menjadi lebih pantas.
from operator import itemgetter print(sorted(dict_list key=itemgetter('letter'))) print(sorted(dict_list, key=itemgetter('letter', 'number')))
itemgetter() tidak memperoleh nilai, tetapi mentakrifkan fungsi yang melaluinya ia digunakan pada objek sasaran.
Atas ialah kandungan terperinci Kamus Python: Adakah terdapat sebarang permainan lanjutan yang saya tidak tahu bagaimana untuk melakukannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!