2010-12-20 26 views
11

tôi là làm cho từ điển:điển trong python với trật tự tôi đặt ở đầu

d = {"server":"mpilgrim", "database":"master"} 
d['mynewkey'] = 'mynewvalue' 

Nhưng khi tôi hiển thị nó tôi thấy rằng dict này được đảo ngược.

print(d) 

{'mynewkey': 'mynewvalue', 'database': 'master', 'server': 'mpilgrim'} 

Làm cách nào để đảo ngược lại?

Hoặc nếu đúng là từ điển không thể sắp xếp những gì tôi phải sử dụng để có bộ sưu tập mà thứ tự của thông tin đó quan trọng?

Trả lời

17

điển là không có thứ tự (thứ tự là xác định, nhưng phụ thuộc vào một số ít các yếu tố bạn thậm chí không nghĩ đến và không nên quan tâm - hash của chìa khóa, thứ tự chèn, va chạm, v.v.) Trong Python 2.7+, sử dụng collections.OrderedDict. Nếu bạn phải sử dụng một phiên bản cũ hơn, có nhiều triển khai khác nhau mà Google có thể chỉ cho bạn.

+0

Việc thực hiện đơn giản nhất phúc một danh sách các bộ dữ liệu, especiall nếu tốc độ không phải là một vấn đề. – katrielalex

+0

Có, đó là dễ nhất, nhưng nó thực hiện * khủng khiếp *. Đặc biệt là khi nó được sử dụng với các thuật toán giả định "thực" (tức là 'O (1)' đọc/ghi/'trong') dicts – delnan

1

Dictionnary của bạn không hoàn nguyên. Nó được sắp xếp một phần theo mã băm của bạn. Bạn không thể thay đổi thứ tự này (không phải không sử dụng từ điển tùy chỉnh). Trong python 2.7 hoặc mới hơn, bạn có thể sử dụng một từ điển đặt hàng (collections.OrderedDict).

Trong phiên bản cũ hơn, bạn có thể sử dụng recipe sau.

Cũng có một cái nhìn tại câu hỏi này: What is the best ordered dict implementation in python?

17
from collections import OrderedDict 

d = OrderedDict() 
d["server"] = "mpilgrim" 
d["database"] = "master" 
d['mynewkey'] = 'mynewvalue' 

print(d) 

OrderedDict([('server', 'mpilgrim'), ('database', 'master'), ('mynewkey', 'mynewvalue')]) 
+0

Không, không ổn, vì, lúc bắt đầu" server ":" mpilgrim "trước tiên. Bây giờ là số thứ hai – user278618

+0

Phải, tôi đã sửa khóa chèn một khi tôi nhận thấy. Đối với 'OrderedDicts', bạn cần thêm các phím bằng toán tử [] (' __setitem__'). Thứ tự chèn được giữ nguyên. – Aphex

3

Nếu bạn đang sử dụng python 3.6 từ điển hiện nay được sắp xếp theo thứ tự chèn

https://www.python.org/dev/peps/pep-0468/

Nếu không (như những người khác đã nói) Tôi muốn giới thiệu collections.OrderedDict

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