94
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi đang cố gắng tạo một từ điển bằng cách sử dụng cho các vòng lặp. Đây là mã của tôi:
dicts = {}
keys = range[4]
values = ["Hi", "I", "am", "John"]
for i in keys:
for x in values:
dicts[i] = x
print[dicts]
Điều này ra:
{0: 'John', 1: 'John', 2: 'John', 3: 'John'}
Why?
Tôi đã lên kế hoạch làm cho nó đầu ra:
{0: 'Hi', 1: 'I', 2: 'am', 3: 'John'}
Tại sao nó không đầu ra theo cách đó và làm thế nào để chúng ta làm cho nó xuất ra chính xác?
Đã hỏi ngày 16 tháng 5 năm 2015 lúc 21:17May 16, 2015 at 21:17
3
dicts = {}
keys = range[4]
values = ["Hi", "I", "am", "John"]
for i in keys:
dicts[i] = values[i]
print[dicts]
cách khác
In [7]: dict[list[enumerate[values]]]
Out[7]: {0: 'Hi', 1: 'I', 2: 'am', 3: 'John'}
Đã trả lời ngày 16 tháng 5 năm 2015 lúc 21:19May 16, 2015 at 21:19
2
>>> dict[zip[keys, values]]
{0: 'Hi', 1: 'I', 2: 'am', 3: 'John'}
Đã trả lời ngày 16 tháng 5 năm 2015 lúc 21:20May 16, 2015 at 21:20
4
Sử dụng cấu trúc từ điển với các vòng lặp là vô cùng hiệu quả trong Python. Trong thẻ này, tôi sẽ chỉ cho bạn một số ví dụ về cách sử dụng từ điển trong các vòng lặp.
Ví dụ đầu tiên tôi sẽ trình bày là mở rộng một từ điển thành một danh sách các danh sách. Hãy tưởng tượng rằng bạn có một từ điển trong đó chìa khóa là sản phẩm và giá trị là số lượng sản phẩm trong kho. Dưới đây là một ví dụ về cách tôi muốn thay đổi cấu trúc dữ liệu của mình:
- Input:
fruits = {'banana':3,'apple':2, 'mango':1, 'kiwi':5}
- Output:
fruits_list = [
['banana', 'banana', 'banana'],
['apple', 'apple'],
['mango'],
['kiwi', 'kiwi', 'kiwi', 'kiwi', 'kiwi']]
Để đạt được điều này, chúng ta có thể bắt đầu với việc viết ra các bước vào một giải pháp.
Chúng ta cần lặp lại tất cả các khóa trái cây và xây dựng một danh sách lặp lại khóa
{0: 'John', 1: 'John', 2: 'John', 3: 'John'}
2 lần.Tôi sẽ làm điều này bằng cách sử dụng danh sách hiểu.
- Để lặp lại tất cả các mục Dict, bạn sẽ cần
3{0: 'John', 1: 'John', 2: 'John', 3: 'John'}
- Để xây dựng danh sách lặp lại từng khóa n lần làm:
4{0: 'John', 1: 'John', 2: 'John', 3: 'John'}
- Như các giá trị Dict cho biết số lần lặp lại, làm:
5{0: 'John', 1: 'John', 2: 'John', 3: 'John'}
Tôi có thể viết điều này như một vòng lặp và sau đó chuyển đổi nó thành danh sách hiểu biết mà tôi nghĩ là trực quan hơn. Dưới đây là mã là một vòng lặp:
# Initialize the dictionary
fruits = {'banana':3,'apple':2, 'mango':1, 'kiwi':5}
# Create blank list to append to
fruits_list = []
# Create the for loop
for fruit, quantity in fruits.items[]:
# Append the list to the main list
fruits_list.append[[fruit]*quantity]
# Print out the final list
print[fruits_list]
Bây giờ chúng ta có thể làm điều tương tự với sự hiểu biết danh sách. Danh sách hiểu là hành động đưa một vòng lặp vào một danh sách. Điều này có vẻ hơi kỳ lạ, nhưng các nhà sản xuất Python nhận ra rằng nó đủ phổ biến để sử dụng một vòng lặp để tạo ra một danh sách mà điều quan trọng là phải tạo một lối tắt.for loop into a list. This may seem a little weird, but the makers of python realized that it was common enough to use a for loop to create a list that it was important to create a shortcut.
Liệt kê danh sách lúc đầu là khó khăn, bởi vì nó cảm thấy không tự nhiên, nhưng bạn càng viết mã trong Python, bạn sẽ càng tìm thấy những lợi ích bổ sung của việc sử dụng danh sách hiểu. Chỉ cần nhớ: mọi thứ bạn làm với danh sách hiểu có thể được thực hiện với một vòng lặp. Nhưng nghịch đảo không đúng.Just remember: Everything you do with list comprehension can be done with a for loop. But the inverse is not true.
Cú pháp của danh sách hiểu
variable = [expression for item in list]
Bạn cũng có thể thêm một câu lệnh có điều kiện vào danh sách hiểu:
{0: 'John', 1: 'John', 2: 'John', 3: 'John'}
0Vậy làm thế nào điều này áp dụng cho vấn đề trên? Chà, dưới đây tôi chỉ ra cách chúng ta có thể sử dụng định dạng mới này để hỗ trợ chúng ta!
{0: 'John', 1: 'John', 2: 'John', 3: 'John'}
1Chúng tôi sẽ khám phá thêm danh sách hiểu biết trong tương lai, vì vậy bây giờ chỉ cần đảm bảo rằng bạn hiểu cách chúng tôi đang sử dụng phương pháp
{0: 'John', 1: 'John', 2: 'John', 3: 'John'}
6