2010-12-20 21 views
11

olarak belirlenmiştir:Sözlük Ben sözlüğü yapıyorum başlangıcında

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

Ama bunu göstermek zaman bu dict tam tersi olması gördü.

print(d) 

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

Geri nasıl dönülür?

Ya da sözlüğün söz konusu sıralamanın hangi durumlarda önemli olduğu koleksiyonda kullanmak için kullanmam gereken şey sıradışı değilse doğru mu?

cevap

17

Sözlük (sipariş deterministik, ancak bile sanmıyorum faktörlerin bir avuç bağlıdır ve umurumda değil sırasız şunlardır:

Ayrıca, bu soruya bir göz Anahtarlar, ekleme sırası, çarpışmalar, vb.). Python 2.7+ sürümünde collections.OrderedDict kullanın. Eski bir sürümü kullanmanız gerekiyorsa, Google'ın size gösterebileceği çeşitli uygulamalar vardır. Python 3.6 sözlükleri kullanıyorsanız

+0

en kolay uygulama varlık öneriyoruz kampanya siparişinde göre sıralanır Hız bir sorun değilse, tuples listesi, especiall. – katrielalex

+0

Evet, bu en kolay, ama * korkunç * gerçekleştirir. Özellikle "gerçek" (yani "O (1)' okuma/yazma/'in') dicts – delnan

1

Tercümeniz tamamen geri alınmadı. Kısmen size anahtarların karma göre sıralanır. Bu sırayı değiştiremezsiniz (özel sözlük kullanmadan). Python 2.7 ya da daha sonra sıralı bir sözlük kullanabilirsiniz (collections.OrderedDict).

Önceki sürümde aşağıdaki recipe'u kullanabilirsiniz. - karması 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

Hayır kabul eden algoritmalar ile kullanıldığında, bu iyi değil, çünkü, başlangıçta "sunucu": "mpilgrim" ilk oldu. Şimdi ikinci – user278618

+0

Doğru, fark ettiğimde anahtar eklemeyi tamir ettim. 'OrderedDicts' için, [] operatörünü (' __setitem__') kullanarak anahtar eklemeniz gerekir. Ekleme siparişi korunur. – Aphex