2014-05-18 18 views
16

Tôi là một lập trình viên python cơ bản để hy vọng câu trả lời cho câu hỏi của tôi sẽ dễ dàng. Tôi đang cố gắng lấy một từ điển và nối nó vào một danh sách. Từ điển sau đó thay đổi các giá trị và sau đó được nối lại trong một vòng lặp. Dường như mỗi khi tôi làm điều này, tất cả các từ điển trong danh sách thay đổi giá trị của chúng để khớp với các từ điển vừa được nối. Ví dụ:Bổ sung từ điển vào danh sách trong một vòng lặp Python

>>> dict = {} 
>>> list = [] 
>>> for x in range(0,100): 
...  dict[1] = x 
...  list.append(dict) 
... 
>>> print list 

tôi sẽ giả định kết quả sẽ là [{1:1}, {1:2}, {1:3}... {1:98}, {1:99}] nhưng thay vào đó tôi nhận:

[{1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}, {1: 99}] 

Any help is appreciated rất nhiều.

+1

Bạn đang điền 'list' (mà bạn không nên đặt tên' list') với sự tham khảo với cùng 'dict' (mà bạn không nên gọi' dict') – jonrsharpe

Trả lời

32

Bạn cần phải thêm một bản sao , nếu không bạn chỉ là tài liệu tham khảo thêm vào từ điển cùng hơn và hơn nữa:

yourlist.append(yourdict.copy()) 

tôi đã sử dụng yourdictyourlist thay vì dictlist; bạn không muốn che giấu các kiểu tích hợp.

+2

Ngoài ra: 'yourlist'! – jonrsharpe

+0

Ah, vâng, đã sửa. –

2

Bạn cũng có thể sử dụng zip và danh sách hiểu để thực hiện những gì bạn cần.

Nếu bạn muốn các giá trị dict để bắt đầu sử dụng tại một range(1,100)

l = [dict(zip([1],[x])) for x in range(1,100)] 
4

Khi bạn tạo từ điển adict bên ngoài vòng lặp, bạn đang bổ sung dict cùng vào danh sách alist của bạn. Nó có nghĩa là tất cả các bản sao trỏ đến cùng một từ điển và bạn sẽ nhận được giá trị cuối cùng {1:99} mỗi lần. Chỉ cần tạo mọi từ điển trong vòng lặp và bây giờ bạn có 100 từ điển khác nhau.

alist = [] 
for x in range(100): 
    adict = {1:x} 
    alist.append(adict) 
print(alist) 
1

Chỉ cần đặt dict = {} bên trong vòng lặp.

>>> dict = {} 
>>> list = [] 
>>> for x in range(0, 100): 
     dict[1] = x 
     list.append(dict) 
     dict = {} 

>>> print list 
Các vấn đề liên quan