Memadatkan dua senarai yang tidak sama panjang ke dalam kamus Python

WBOY
Lepaskan: 2023-08-19 11:29:06
ke hadapan
1197 orang telah melayarinya

Memadatkan dua senarai yang tidak sama panjang ke dalam kamus Python

Pengenalan

Dalam Python, senarai dan kamus ialah salah satu kaedah pengumpulan dan pemprosesan data yang paling biasa digunakan. Terdapat banyak operasi yang berkaitan dengan senarai dan kamus yang biasa digunakan untuk mendapatkan data dalam bentuk yang dikehendaki. Kadangkala kita juga mungkin perlu memampatkan dua senarai berbeza dan mendapatkan senarai dimampatkan dalam bentuk kamus.

Dalam artikel ini, kita akan membincangkan operasi mampatan dua senarai panjang yang tidak sama dan mengeluarkan hasilnya sebagai kamus. Artikel ini akan membantu pembaca memahami operasi pemampatan senarai dan menjana kamus daripadanya.

Jadi mari kita mula membincangkan maksud memampatkan dua senarai yang tidak sama rata.

Mampatkan dua senarai dengan panjang yang tidak sama

Dalam Python, pemampatan ialah salah satu operasi yang paling biasa semasa mengumpul dan memproses data, dan ia melibatkan penambahan dua senarai dalam bentuk pasangan nilai kunci. Ringkasnya, ia adalah operasi di mana nilai atau elemen dalam senarai disusun atau diwakili dengan cara yang menjadikannya kelihatan seperti pasangan nilai kunci dalam hasil output.

Operasi ini adalah salah satu yang paling biasa, kerana kadangkala kita mungkin memerlukan senarai atau kamus yang merupakan gabungan dua senarai berbeza. Kita boleh mempunyai dua senarai saiz atau panjang yang berbeza dan kemudian menggabungkannya dan mengeluarkannya dalam bentuk kamus untuk pemprosesan data yang lebih mudah dan cekap.

Terdapat banyak cara untuk mencapai kesan yang sama. Mari kita bincangkan beberapa kaedah ini.

Kaedah 1: Menggunakan Itertools + Cycle

Kami boleh menggunakan perpustakaan itertools dan boleh mengimport kitaran untuk mengezip dua senarai dan mendapatkan kamus sebagai output

# Itertools + Cycle Method 


# Import the cycle from itertools
from itertools import cycle

# define two lists
list1 = ['a', 'b', 'c', 'd', 'e']
list2 = [1, 2, 3, 4]

# zip the lists and pass them into the dictionary form
res = dict(zip(list1, cycle(list2)))

# print the final results
print("Final Output Dictionary : ", str(res))
Salin selepas log masuk

Seperti yang kita lihat dalam kod di atas, mula-mula kita mengimport kitaran daripada itertools dan menentukan dua senarai saiz yang berbeza.

Kemudian gunakan fungsi gelung dalam itertools untuk memampatkan dua senarai dengan panjang yang tidak sama, dan kemudian mewakili output sebagai kamus.

Output

Output kod berikut ialah:

Final Output Dictionary: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 1}
Salin selepas log masuk

Kaedah 2: Gunakan deque

Sama seperti gelung dalam itertools, kita boleh menggunakan deques dalam koleksi. Dengan mengimport deque, kita boleh memampatkan dua senarai dan mendapatkan kamus.

# using deque for zipping lists

from collections import deque

# define two list that are to be zipped 
ini_lis1 = ['a', 'b', 'c', 'd', 'e']
ini_lis2 = deque([1, 2, 3, 4])

# zip teh lists using deque
result = {}
for letter in ini_lis1:
  number = ini_lis2.popleft()
  result[letter] = number
  ini_lis2.append(number)


# print the final results
print("Output Dict : ", str(result))
Salin selepas log masuk

Seperti yang dapat kita lihat dalam kod di atas, selepas mengimport deque daripada koleksi, dua senarai saiz berbeza ditentukan.

Kemudian gunakan fungsi gelung dan tambah untuk memampatkan dua senarai. Keputusan akhir akan dicetak dalam bentuk kamus.

Output

Output kod ini ialah:

Output Dict : {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 1}
Salin selepas log masuk
Salin selepas log masuk

Kaedah 3: Gunakan kelas lalai

Kelas lalai juga boleh digunakan untuk memampatkan dua senarai saiz berbeza dan memberikan kamus sebagai output.

# using default class method

# import default dict from collections
from collections import defaultdict

# define two lists
ini_lis1 = ['a', 'b', 'c', 'd', 'e']
ini_lis2 = [1, 2, 3, 4]

# use default dict
result = defaultdict(int)

# add values to the keys respectively
for i in range(len(ini_lis1)):
	result[ini_lis1[i]] += ini_lis2[i % len(ini_lis2)]

# print the final results
print("Output Dict: ", str(dict(result)))
Salin selepas log masuk

Seperti yang kita lihat dalam kod di atas, dua senarai ditakrifkan selepas mengimport kelas lalai dan menggunakan gelung for untuk menambah nilai pada kekunci yang sepadan.

Sila ambil perhatian bahawa jika kunci tidak terdapat dalam data, ia akan mengembalikan nilai lalai. Di sini kita menggunakan nilai lalai 0.

Output

Output kod berikut ialah:

Output Dict: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 1}
Salin selepas log masuk
Salin selepas log masuk

Kaedah 4: Gunakan Zip() + Dict()

Ini ialah cara paling mudah untuk zip dua senarai berbeza dan mengeluarkannya sebagai kamus.

# using zip + dict method
# define two lists that are to be zipped
ini_lis1 = ['a', 'b', 'c', 'd', 'e']
ini_lis2 = [1, 2, 3, 4]

# use zip()
result = dict(zip(ini_lis1, ini_lis2 *
        ((len(ini_lis1) + len(ini_lis2) - 1) // len(ini_lis2))))

# print the final results
print("Output Dict: ", str(result))
Salin selepas log masuk

Dalam kod di atas, kami mula-mula mentakrifkan dua senarai berbeza dan kemudian semasa mentakrifkan hasilnya, hantar sintaks atau kod ke dict() yang akan mengembalikan output dalam format data kamus. Di sini, dua senarai dimampatkan bersama menggunakan kata kunci zip, yang menambahkan nilai dua senarai berbeza bersama-sama.

Output

Output kod berikut ialah:

Output Dict: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 1}
Salin selepas log masuk
Salin selepas log masuk

Kaedah 5: Gunakan Itertools() + enumerate()

Dalam kaedah ini, kami akan menggunakan perpustakaan Itertools dan menggunakan enumerate dalam proses memampatkan dua senarai.

# using itertools + enumerate
# Import itertools
from itertools import cycle

# define two lists
ini_lis1 = ['a', 'b', 'c', 'd', 'e']
ini_lis2 = [1, 2, 3, 4]

# zip the two lists using for loop and enumerate
result = {v: ini_lis2[i % len(ini_lis2)]
    for i, v in enumerate(ini_lis1)}

# print the final results
print("Output Dict : ", str(result))
Salin selepas log masuk

Seperti yang dapat kita lihat dalam kod di atas, kita mula-mula mengimport kitaran daripada itertools dan kemudian menentukan dua senarai saiz yang berbeza. Kemudian menggunakan fungsi gelung for dan enumerate, kami menambah (mampat) nilai atau elemen dua senarai berbeza dan kemudian nilai diwakili dalam bentuk kamus.

Output

Output kod berikut ialah:

Output Dict : {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 1}
Salin selepas log masuk
Salin selepas log masuk

Kesimpulan

Dalam artikel ini, kami membincangkan menggunakan enam kaedah berbeza untuk memampatkan dua senarai saiz berbeza dalam Python, dan memberikan contoh dan arahan kod. Artikel ini akan membantu pembaca melakukan operasi yang serupa jika diperlukan.

Atas ialah kandungan terperinci Memadatkan dua senarai yang tidak sama panjang ke dalam kamus Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:tutorialspoint.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