에서 갈 수있는 좋은 방법이 있을까요 {2:3, 1:89, 4:5, 3:0}
에 {1:89, 2:3, 3:0, 4:5}
?
일부 게시물을 확인했지만 모두 튜플을 반환하는 “정렬 된”연산자를 사용합니다.
답변
표준 파이썬 사전은 순서가 없습니다. (키, 값) 쌍을 정렬하더라도 dict
순서를 유지하는 방식으로 저장할 수는 없습니다 .
가장 쉬운 방법은 OrderedDict
요소를 삽입 한 순서를 기억하는를 사용 하는 것입니다.
In [1]: import collections
In [2]: d = {2:3, 1:89, 4:5, 3:0}
In [3]: od = collections.OrderedDict(sorted(d.items()))
In [4]: od
Out[4]: OrderedDict([(1, 89), (2, 3), (3, 0), (4, 5)])
방법 od
이 인쇄되는 것을 신경 쓰지 마십시오 . 예상대로 작동합니다.
In [11]: od[1]
Out[11]: 89
In [12]: od[3]
Out[12]: 0
In [13]: for k, v in od.iteritems(): print k, v
....:
1 89
2 3
3 0
4 5
파이썬 3
Python 3 사용자의 경우 .items()
대신 다음 을 사용해야합니다 .iteritems()
.
In [13]: for k, v in od.items(): print(k, v)
....:
1 89
2 3
3 0
4 5
답변
사전 자체에는 주문한 항목이 없습니다. 어떤 순서로 인쇄하려는 경우 다음과 같은 예가 있습니다.
Python 2.4 이상에서 :
mydict = {'carl':40,
'alan':2,
'bob':1,
'danny':3}
for key in sorted(mydict):
print "%s: %s" % (key, mydict[key])
제공합니다 :
alan: 2
bob: 1
carl: 40
danny: 3
(2.4 이하의 파이썬 🙂
keylist = mydict.keys()
keylist.sort()
for key in keylist:
print "%s: %s" % (key, mydict[key])
출처 : http://www.saltycrane.com/blog/2007/09/how-to-sort-python-dictionary-by-keys/
답변
>>> from collections import OrderedDict
>>> # regular unsorted dictionary
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
>>> # dictionary sorted by key -- OrderedDict(sorted(d.items()) also works
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
>>> # dictionary sorted by value
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
>>> # dictionary sorted by length of the key string
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
답변
CPython / PyPy 3.6 및 Python 3.7 이상의 경우 다음을 사용하여 쉽게 수행 할 수 있습니다.
>>> d = {2:3, 1:89, 4:5, 3:0}
>>> dict(sorted(d.items()))
{1: 89, 2: 3, 3: 0, 4: 5}
답변
키를 정렬 된 순서로 자동 유지 관리하는 사전 구현을 제공하는 많은 Python 모듈이 있습니다. 순수 Python 및 빠른 C 구현 인 sortedcontainers 모듈을 고려하십시오 . 서로 벤치 마크 된 다른 인기있는 옵션과 의 성능 비교 도 있습니다.
반복하면서 키 / 값 쌍을 지속적으로 추가하고 제거해야하는 경우 순서가 지정된 dict를 사용하는 것은 부적절한 솔루션입니다.
>>> from sortedcontainers import SortedDict
>>> d = {2:3, 1:89, 4:5, 3:0}
>>> s = SortedDict(d)
>>> s.items()
[(1, 89), (2, 3), (3, 0), (4, 5)]
SortedDict 유형은 내장 dict 유형으로는 불가능한 색인 된 위치 검색 및 삭제도 지원합니다.
>>> s.iloc[-1]
4
>>> del s.iloc[2]
>>> s.keys()
SortedSet([1, 2, 4])
답변
간단히:
d = {2:3, 1:89, 4:5, 3:0}
sd = sorted(d.items())
for k,v in sd:
print k, v
산출:
1 89
2 3
3 0
4 5
답변
다른 사람들이 언급했듯이 사전은 본질적으로 순서가 없습니다. 그러나 문제가 순서대로 사전을 표시하는__str__
경우 사전 서브 클래스 의 메소드를 대체 하고 내장 클래스 대신이 사전 클래스를 사용할 수 있습니다 dict
. 예 :
class SortedDisplayDict(dict):
def __str__(self):
return "{" + ", ".join("%r: %r" % (key, self[key]) for key in sorted(self)) + "}"
>>> d = SortedDisplayDict({2:3, 1:89, 4:5, 3:0})
>>> d
{1: 89, 2: 3, 3: 0, 4: 5}
이것은 키가 저장되는 방식, 키를 반복 할 때 키가 반환되는 순서 print
, 파이썬 콘솔에서 또는 파이썬 콘솔에서 표시되는 방식에 대해서는 아무것도 변경하지 않습니다 .
