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

WBOY
Lepaskan: 2023-04-11 23:58:08
ke hadapan
1590 orang telah melayarinya

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)]
Salin selepas log masuk

Kaedah penulisan biasa

for k, v in lst:
dic[k] = v
Salin selepas log masuk

Kaedah penulisan yang lebih pythonic

Gunakan terbitan kamus untuk menjana kamus dengan cepat.

{k: v for k, v in lst}
Salin selepas log masuk

Nilai lalai kunci

Apabila kunci yang ditentukan tidak wujud, tetapkan nilai kepada 0.

Kaedah penulisan biasa

if key not in dct:
dct[key] = 0
Salin selepas log masuk

Kaedah tulisan Phytonik

dct[key] = dct.get(key, 0)
Salin selepas log masuk

Kunci pertukaran dan nilai

Kaedah penulisan biasa

dic = {'Python': 1, 'Java': 2}
new_dic = {}
for k, v in dic.items():
new_dic[v] = k
Salin selepas log masuk

Lebih banyak tulisan pythonic

dic = {'Python': 1, 'Java': 2}
new_dic = {v: k for k, v in dic.items()}

Salin selepas log masuk

Pengubahsuaian jujukan dan permulaan

Data sampel

lst = [('a', 1), ('b', 2), ('c', 3)]
dic = {'a': [0]}
Salin selepas log masuk

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]
Salin selepas log masuk

Lebih banyak tulisan pythonic

for (key, value) in lst:
group = dic.setdefault(key, [])
group.append(value)
# dic:{'a': [0, 1], 'b': [2], 'c': [3]}
Salin selepas log masuk

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}
Salin selepas log masuk

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}
Salin selepas log masuk

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)}
Salin selepas log masuk

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}
Salin selepas log masuk

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'}]
Salin selepas log masuk

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')))
Salin selepas log masuk

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!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan