2016-03-27 24 views
7

Tôi biết chúng tôi sử dụng enumerate để lặp lại danh sách nhưng tôi đã thử nó trong từ điển và không đưa ra lỗi.liệt kê() cho từ điển trong python

Mã sản phẩm:

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7} 

for i, j in enumerate(enumm): 
    print(i, j) 

OUTPUT:

0 0 

1 1 

2 2 

3 4 

4 5 

5 6 

6 7 

Có thể ai đó giải thích đầu ra?

+1

Vòng lặp trên một dict in các phím, vì vậy bạn mong đợi điều gì? – salparadise

Trả lời

4
for k,v in dict.iteritems(): 
    print(k,v) 
+0

Nó không cho phép tôi thực hiện chỉnh sửa 2 ký tự trên bài đăng này, nhưng OP đã gắn thẻ này là cho Python 3, vì vậy câu lệnh in cần có dấu ngoặc đơn quanh k, v. –

+0

@Mr. Tôi, ty, sẽ sửa. – roadrunner66

+2

Điều này cần lưu ý là chỉ có sẵn cho python2. dict.iteritems() đã được gỡ bỏ trong python3, xem thêm https://stackoverflow.com/questions/30418481/error-dict-object-has-no-attribute-iteritems-when-trying-to-use-networkx – gyger

1

Điều đó chắc chắn có vẻ khó hiểu. Vì vậy, đây là những gì đang xảy ra. Giá trị đầu tiên của liệt kê (trong trường hợp này là i) trả về giá trị chỉ mục tiếp theo bắt đầu từ 0 đến 0, 1, 2, 3, ... Nó sẽ luôn trả về các số này bất kể những gì có trong từ điển. Giá trị thứ hai của liệt kê (trong trường hợp này là j) trả về các giá trị trong từ điển của bạn/enumm (chúng ta gọi nó là một từ điển trong Python). Những gì bạn thực sự muốn làm là những gì roadrunner66 trả lời.

9

Cột đầu tiên của đầu ra là chỉ mục của từng mục trong enumm và cột thứ hai là khóa của nó. Nếu bạn muốn lặp từ điển của bạn sau đó sử dụng .items():

for k, v in enumm.items(): 
    print(k, v) 

Và kết quả sẽ giống như thế:

0 1 
1 2 
2 3 
4 4 
5 5 
6 6 
7 7 
0
  1. iterating trên một dict Python có nghĩa là để lặp qua các phím của nó chính xác giống như cách với dict.keys()
  2. Thứ tự của các khóa được xác định bởi mã triển khai và bạn không thể mong đợi một số thứ tự cụ thể:

    Các khóa và giá trị được lặp lại theo thứ tự tùy ý là không ngẫu nhiên, thay đổi trên các triển khai Python và phụ thuộc vào lịch sử chèn và xóa của từ điển . Nếu các khóa, giá trị và lượt xem các mục được lặp lại mà không có sửa đổi can thiệp vào từ điển , thứ tự của các mục sẽ tương ứng trực tiếp.

Đó là lý do tại sao bạn thấy các chỉ số 0-7 trong cột đầu tiên. Chúng được sản xuất bởi enumerate và luôn theo thứ tự đúng. Hơn nữa bạn thấy các phím của dict từ 0 đến 7 trong cột thứ hai. Chúng không được sắp xếp.

Các vấn đề liên quan