2016-04-12 25 views
1

Anahtarlar tarafından bir dict sıralanmış repr() gibi string almak için basit bir yol istiyorum.repr() of dict, ancak sipariş

my_print(dict(a=1, b=2, c=3)) -> "{'a': 1, 'b': 2, 'c': 3}" 

Çözümümün:

import collections 
print repr(collections.OrderedDict(sorted(dict(a=1, b=2, c=3).items()))) 

... çalışmıyor. İşte yanlış çıktı:

OrderedDict([('a', 1), ('b', 2), ('c', 3)]) 

Nasıl my_print() uygulamak? dicts Python sıralanır olmadığı için

Bu çözüm değildir:

print dict(a=1, b=2, c=3) 
+1

Bu çıktı tam olarak mı? – deceze

+0

@deceze çıkış ** sıralanmalıdır **. repr (dict (..)) sıralanmamıştır. – guettli

+0

Bir "dict" siparişi olmadığı için. –

cevap

2

Eh, JSON kullanabilirsiniz.

import json 
import collections 
def my_print(x): 
    return json.dumps(x) 

Sonuç:

>>> my_print(collections.OrderedDict(sorted(dict(a=1, b=2, c=3).items()))) 
'{"a": 1, "b": 2, "c": 3}' 
+2

Öyleyse neden json.dumps (dict (a = 1, b = 2, c = 3), sort_keys = True) '? Bu şekilde iç içe geçmiş sözlükler de anahtar olarak sıralanır ... – bufh

1

JSON basit türleri için çalışacaktır. Elle böyle yapılabilir: odcollections.OrderedDict nesne

print '{' + ', '.join('%r: %r' % i for i in od.iteritems()) + '}' 

olduğu.

+1

''% r:% r'% i od.iteritems() için ... i – deceze

+0

@deceze Bunu bilmiyordum. Cevabı güncelleyeceğim. Teşekkürler! –