Hướng dẫn can you zip dictionaries in python? - bạn có thể nén từ điển trong python không?

Hướng dẫn can you zip dictionaries in python? - bạn có thể nén từ điển trong python không?

Danh sách và từ điển là một trong những cấu trúc dữ liệu mạnh mẽ trong Python. Chuyển đổi từ nhau là nhiệm vụ phổ biến nhất phải đối mặt trong sự phát triển của Python.list and dictionary are among the robust data structures in Python. Converting from each other is the most common task faced in Python development.

Bạn thường tạo một từ điển từ hai chuỗi khác nhau nhưng liên quan chặt chẽ. Một cách dễ dàng để tiếp cận điều này là sử dụng các phương thức Dict () và Zip () cùng nhau.dict() and zip() methods together.

Để tạo một từ điển từ hai chuỗi, hãy sử dụng các phương thức Dict () và Zip (). Dict (zip (khóa, giá trị)) cần tra cứu toàn cầu một lần cho Dict và Zip.create a dictionary from two sequences, use the dict() and zip() methods. The dict(zip(keys, values)) needs the one-time global lookup for dict and zip.

Nó không tạo ra các cấu trúc dữ liệu trung gian không cần thiết hoặc đối phó với các tra cứu cục bộ trong các ứng dụng chức năng.

Trong Python 3, phương thức zip () hiện trả về một trình lặp lười biếng, cách tiếp cận được sử dụng nhiều nhất.

# app.py

stocks = ['reliance', 'infosys', 'tcs']
prices = [2175, 1127, 2750]
dictionary = dict(zip(stocks, prices))
print(dictionary)

Đầu ra

{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}

Trong ví dụ này, chúng tôi đã xác định hai danh sách chúng tôi cần chuyển đổi thành một từ điển. Danh sách các mục đầu tiên sẽ là khóa cho từ điển và danh sách thứ hai các mục sẽ là từ điển.

Phương thức zip (trường, giá trị) trả về một trình lặp tạo ra các bộ dữ liệu hai mục. Nếu bạn gọi dict () trên trình lặp đó, bạn có thể tạo từ điển bạn cần.

Các yếu tố của danh sách đầu tiên trở thành các khóa từ điển và danh sách thứ hai của phần tử & nbsp; đại diện cho các giá trị trong từ điển.first list become the dictionary’s keys, and the elements second list represent the values in the dictionary.

Một điều quan trọng cần lưu ý rằng từ điển = {zip (khóa, giá trị)} sẽ không hoạt động. Bạn phải tuyên bố là Dict (Zip ()) một cách rõ ràng. Nếu bạn làm cho nó hoạt động, bạn phải sử dụng khả năng hiểu từ điển thích hợp.

Từ điển Hiểu

Từ điển Hiểu là một cách thanh lịch và súc tích để tạo từ điển. Ví dụ: chúng ta có thể sử dụng ví dụ trên để tạo từ điển từ hai danh sách.

Cú pháp tối thiểu để hiểu từ điển là như sau.

dictionary = {key: value for vars in iterable}

Xem ví dụ về mã sau đây của sự hiểu biết từ điển.

# app.py

stocks = ['reliance', 'infosys', 'tcs']
prices = [2175, 1127, 2750]

new_dict = {stocks: prices for stocks, prices in zip(stocks, prices)}
print(new_dict)

Đầu ra

{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}

Trong ví dụ này, chúng tôi đã xác định hai danh sách chúng tôi cần chuyển đổi thành một từ điển. Danh sách các mục đầu tiên sẽ là khóa cho từ điển và danh sách thứ hai các mục sẽ là từ điển.

Hãy tưởng tượng rằng bạn có:

keys = ('name', 'age', 'food')
values = ('Monty', 42, 'spam')

Cách đơn giản nhất để tạo ra từ điển sau là gì?

dict = {'name' : 'Monty', 'age' : 42, 'food' : 'spam'}

Trình thực hiện nhất, hàm tạo dictionary = {key: value for vars in iterable}3 với dictionary = {key: value for vars in iterable}4

new_dict = dict(zip(keys, values))

Trong Python 3, ZIP hiện trả về một trình lặp lười biếng, và đây bây giờ là cách tiếp cận hiệu suất nhất.

dictionary = {key: value for vars in iterable}
5 không yêu cầu tra cứu toàn cầu một lần cho
dictionary = {key: value for vars in iterable}
3 và
dictionary = {key: value for vars in iterable}
4, nhưng nó không hình thành bất kỳ cấu trúc dữ liệu trung gian không cần thiết nào hoặc phải xử lý các tra cứu cục bộ trong ứng dụng chức năng.

Á hậu, Dict Hiểu biết:

Một á quân gần gũi với việc sử dụng hàm tạo Dict là sử dụng cú pháp gốc của sự hiểu biết của Dict (không phải là một sự hiểu biết danh sách, như những người khác đã đặt nhầm nó):

new_dict = {k: v for k, v in zip(keys, values)}

Chọn điều này khi bạn cần ánh xạ hoặc lọc dựa trên các khóa hoặc giá trị.

Trong Python 2,

dictionary = {key: value for vars in iterable}
4 trả về một danh sách, để tránh tạo một danh sách không cần thiết, hãy sử dụng
dictionary = {key: value for vars in iterable}
9 thay thế (Bí quyết để ZIP có thể giảm các thay đổi mã khi bạn chuyển sang Python 3).

from itertools import izip as zip

Vì vậy, đó vẫn là (2.7):

new_dict = {k: v for k, v in zip(keys, values)}

Python 2, lý tưởng cho

dictionary = {key: value for vars in iterable}
9 từ
# app.py

stocks = ['reliance', 'infosys', 'tcs']
prices = [2175, 1127, 2750]

new_dict = {stocks: prices for stocks, prices in zip(stocks, prices)}
print(new_dict)
1 trở thành
dictionary = {key: value for vars in iterable}
4 trong Python 3.
dictionary = {key: value for vars in iterable}
9 tốt hơn zip cho Python 2 (vì nó tránh được việc tạo danh sách không cần thiết) và lý tưởng cho 2.6 hoặc dưới:

{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}
1

Kết quả cho tất cả các trường hợp:

Trong tất cả trường hợp:

{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}
2

Explanation:

Nếu chúng ta xem xét sự giúp đỡ trên

dictionary = {key: value for vars in iterable}
3, chúng ta sẽ thấy rằng nó có nhiều hình thức đối số:

{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}
3

Cách tiếp cận tối ưu là sử dụng một sự khác biệt trong khi tránh tạo ra các cấu trúc dữ liệu không cần thiết. Trong Python 2, ZIP tạo ra một danh sách không cần thiết:

{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}
4

Trong Python 3, tương đương sẽ là:

{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}
5

và Python 3

dictionary = {key: value for vars in iterable}
4 chỉ tạo ra một đối tượng có thể đi được:

{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}
6

Vì chúng tôi muốn tránh tạo các cấu trúc dữ liệu không cần thiết, chúng tôi thường muốn tránh

dictionary = {key: value for vars in iterable}
4 của Python 2 (vì nó tạo ra một danh sách không cần thiết).

Giải pháp thay thế ít hiệu suất hơn:

Đây là một biểu thức máy phát đang được truyền cho hàm tạo Dict:

{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}
7

hoặc tương đương:

{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}
8

Và đây là một danh sách hiểu được truyền cho hàm tạo Dict:

{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}
9

Trong hai trường hợp đầu tiên, một lớp tính toán không hoạt động (không cần thiết) được đặt trên zip có thể sử dụng được, và trong trường hợp hiểu danh sách, một danh sách bổ sung được tạo ra không cần thiết. Tôi mong đợi tất cả họ sẽ ít hoạt động hơn, và chắc chắn không phải là như vậy.

Đánh giá hiệu suất:

Trong 64 bit Python 3.8.2 do NIX cung cấp, trên Ubuntu 16.04, được đặt hàng từ nhanh nhất đến chậm nhất:

dictionary = {key: value for vars in iterable}
0

dictionary = {key: value for vars in iterable}
5 chiến thắng ngay cả với các bộ khóa và giá trị nhỏ, nhưng đối với các bộ lớn hơn, sự khác biệt về hiệu suất sẽ trở nên lớn hơn.

Một người bình luận nói:

# app.py

stocks = ['reliance', 'infosys', 'tcs']
prices = [2175, 1127, 2750]

new_dict = {stocks: prices for stocks, prices in zip(stocks, prices)}
print(new_dict)
8 có vẻ như là một cách tồi để so sánh hiệu suất. Chắc chắn
# app.py

stocks = ['reliance', 'infosys', 'tcs']
prices = [2175, 1127, 2750]

new_dict = {stocks: prices for stocks, prices in zip(stocks, prices)}
print(new_dict)
9 và/hoặc
{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}
0 sẽ là các chỉ số hữu ích hơn nhiều cho việc sử dụng thực sự.

Chúng tôi sử dụng

# app.py

stocks = ['reliance', 'infosys', 'tcs']
prices = [2175, 1127, 2750]

new_dict = {stocks: prices for stocks, prices in zip(stocks, prices)}
print(new_dict)
8 vì các thuật toán này có tính xác định. Chúng tôi muốn biết hiệu suất của các thuật toán trong các điều kiện tốt nhất có thể.

Nếu hệ điều hành bị treo vì bất kỳ lý do gì, nó không liên quan gì đến những gì chúng ta đang cố gắng so sánh, vì vậy chúng ta cần loại trừ các loại kết quả đó khỏi phân tích của chúng ta.

Nếu chúng tôi sử dụng

# app.py

stocks = ['reliance', 'infosys', 'tcs']
prices = [2175, 1127, 2750]

new_dict = {stocks: prices for stocks, prices in zip(stocks, prices)}
print(new_dict)
9, những loại sự kiện đó sẽ làm lệch kết quả của chúng tôi rất nhiều và nếu chúng tôi sử dụng
{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}
0, chúng tôi sẽ chỉ nhận được kết quả cực đoan nhất - một kết quả có khả năng bị ảnh hưởng nhiều nhất bởi một sự kiện đó.

Một người bình luận cũng nói:

Trong Python 3.6.8, sử dụng các giá trị trung bình, sự hiểu biết của dict thực sự vẫn nhanh hơn, khoảng 30% cho các danh sách nhỏ này. Đối với các danh sách lớn hơn (số ngẫu nhiên 10K), cuộc gọi

dictionary = {key: value for vars in iterable}
3 nhanh hơn khoảng 10%.

Tôi cho rằng chúng tôi có nghĩa là

{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}
5 với các số ngẫu nhiên 10k. Điều đó nghe có vẻ như một trường hợp sử dụng khá bất thường. Điều đó có ý nghĩa rằng các cuộc gọi trực tiếp nhất sẽ thống trị trong các bộ dữ liệu lớn và tôi sẽ không ngạc nhiên nếu hệ điều hành bị chi phối với giá sẽ mất bao lâu để chạy thử nghiệm đó, làm lệch số của bạn. Và nếu bạn sử dụng
# app.py

stocks = ['reliance', 'infosys', 'tcs']
prices = [2175, 1127, 2750]

new_dict = {stocks: prices for stocks, prices in zip(stocks, prices)}
print(new_dict)
9 hoặc
{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}
0, tôi sẽ coi kết quả của bạn vô nghĩa.

Hãy sử dụng kích thước thực tế hơn trên các ví dụ hàng đầu của chúng tôi:

dictionary = {key: value for vars in iterable}
1

Và chúng ta thấy ở đây rằng

{'reliance': 2175, 'infosys': 1127, 'tcs': 2750}
5 thực sự chạy nhanh hơn cho các bộ dữ liệu lớn hơn khoảng 20%.

dictionary = {key: value for vars in iterable}
2

Zip () làm gì trong Python?

Hàm python zip () Hàm zip () trả về một đối tượng zip, đây là một trình lặp của các bộ đếm trong đó mục thứ nhất trong mỗi lần lặp đi qua được ghép nối với nhau, và sau đó mục thứ hai trong mỗi lần lặp được chuyển kết hợp với nhau, v.v.

Tôi có thể zip nhiều hơn hai danh sách Python không?

Hàm python zip () giúp bạn dễ dàng khóa hơn hai danh sách.Điều này hoạt động chính xác như bạn mong đợi, có nghĩa là bạn chỉ cần truyền trong danh sách dưới dạng các đối số khác nhau.Cái này là cái gì?Ở đây bạn đã học được cách zip ba (hoặc nhiều) danh sách trong Python, sử dụng hàm zip () tích hợp!. This works exactly like you'd expect, meaning you just only need to pass in the lists as different arguments. What is this? Here you have learned how to zip three (or more) lists in Python, using the built-in zip() function!

Làm cách nào để zip một tập tin trong Python?

Để nén các tệp riêng lẻ vào tệp zip, hãy tạo một đối tượng ZipFile mới và thêm các tệp bạn muốn nén bằng phương thức write ().Với zipfile.Zipfile (), chỉ định đường dẫn của tệp zip mới được tạo làm tệp tham số đầu tiên và đặt chế độ tham số thứ hai thành 'w' (viết).create a new ZipFile object and add the files you want to compress with the write() method. With zipfile. ZipFile() , specify the path of a newly created ZIP file as the first parameter file , and set the second parameter mode to 'w' (write).

Làm thế nào để bạn zip hai bộ dữ liệu trong Python?

12.5 Danh sách và Tuples ZIP là một hàm tích hợp có hai hoặc nhiều chuỗi và các zips, chúng vào một danh sách các bộ dữ liệu trong đó mỗi bộ chứa một phần tử từ mỗi chuỗi.Trong Python 3, ZIP trả về một bộ lặp của các bộ dữ liệu, nhưng đối với hầu hết các mục đích, một trình lặp lại hoạt động như một danh sách.