Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kamus Python: Adakah terdapat sebarang permainan lanjutan yang saya tidak tahu bagaimana untuk melakukannya?

Kamus Python: Adakah terdapat sebarang permainan lanjutan yang saya tidak tahu bagaimana untuk melakukannya?

WBOY
WBOYke hadapan
2023-04-11 23:58:081529semak imbas

Kamus Python: Adakah terdapat sebarang permainan lanjutan yang saya tidak tahu bagaimana untuk melakukannya?


Jana kamus daripada jujukan

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}

Nilai lalai kunci

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)

Kunci pertukaran dan nilai

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()}

Pengubahsuaian jujukan dan permulaan

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.

Tetapkan operasi kunci dan item

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 .

Isih kamus mengikut kunci atau nilai

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}

Isih berbilang kamus

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!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam