이전 버전의 Python 용 OrderedDict
정렬 된 사전은 매우 유용한 구조이지만 안타깝게도 3.1 및 2.7 버전에서만 작동하는 최신 사전 입니다. 이전 버전에서 정렬 된 사전을 어떻게 사용할 수 있습니까?
pip로 Python 2.6에 ordereddict를 설치했습니다.
pip install ordereddict
문서 에 따르면 Python 버전 2.4 이상의 경우이 코드를 사용해야합니다. PEP에 기여한 사람 중 한 명인 Raymond Hettinger의 코드 도 있습니다 . 여기의 코드는 2.6 및 3.0에서 작동한다고 주장하며 제안을 위해 작성되었습니다.
다른 버전의 Python에 대한 OrderedDict 클래스를 가져 오려면 다음 코드 조각을 고려하십시오.
try:
from collections import OrderedDict
except ImportError:
from ordereddict import OrderedDict
# Now use it from any version of Python
mydict = OrderedDict()
Python 2.6 이전 버전은 설치해야 ordereddict
하지만 (pip 또는 기타 방법 사용) 최신 버전은 기본 제공 컬렉션 모듈에서 가져옵니다.
또한 상황에 따라 다음과 같은 경우에만 프로그래밍 할 수 있습니다.
def doSomething(strInput): return [ord(x) for x in strInput]
things = ['first', 'second', 'third', 'fourth']
oDict = {}
orderedKeys = []
for thing in things:
oDict[thing] = doSomething(thing)
orderedKeys.append(thing)
for key in oDict.keys():
print key, ": ", oDict[key]
print
for key in orderedKeys:
print key, ": ", oDict[key]
두 번째 : [115, 101, 99, 111, 110, 100]
네 번째 : [102, 111, 117, 114, 116, 104]
세 번째 : [116, 104, 105, 114, 100]
첫 번째 : [102, 105, 114, 115, 116]첫 번째 : [102, 105, 114, 115, 116]
두 번째 : [115, 101, 99, 111, 110, 100]
세 번째 : [116, 104, 105, 114, 100]
네 번째 : [102, 111, 117, 114, 116, 104]
사전에 정렬 된 키를 삽입 할 수도 있습니다. oDict [ 'keyList'] = orderedKeys
또한 future
py2-3 호환 코드베이스를 시도해 볼 수 있습니다 .
future
pip를 통해 설치 :
pip install future
- OrderedDict 가져 오기 및 사용 :
from future.moves.collections import OrderedDict
python2.6에서 나에게 주었다.
$ pip install ordereddict
Could not find a version that satisfies the requirement from (from versions:)
No matching distribution found for from
그러나
$ easy_install ordereddict
install_dir /usr/local/lib/python2.6/dist-packages/
Searching for ordereddict
Reading http://pypi.python.org/simple/ordereddict/
Best match: ordereddict 1.1
Downloading https://pypi.python.org/packages/source/o/ordereddict/ordereddict-1.1.tar.gz#md5=a0ed854ee442051b249bfad0f638bbec
Processing ordereddict-1.1.tar.gz
Running ordereddict-1.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-lYgPE3/ordereddict-1.1/egg-dist-tmp-GF2v6g
zip_safe flag not set; analyzing archive contents...
Adding ordereddict 1.1 to easy-install.pth file
Installed /usr/local/lib/python2.6/dist-packages/ordereddict-1.1-py2.6.egg
Processing dependencies for ordereddict
Finished processing dependencies for ordereddict
했다.
어떤 이유로 pip를 가진 사용자에게 의존 할 수없는 사람들을 위해 OrderedDict 의 정말 끔찍한 구현이 있습니다 (불변이며 대부분의 기능이 있지만 성능 향상은 없음).
class OrderedDict(tuple):
'''A really terrible implementation of OrderedDict (for python < 2.7)'''
def __new__(cls, constructor, *args):
items = tuple(constructor)
values = tuple(n[1] for n in items)
out = tuple.__new__(cls, (n[0] for n in items))
out.keys = lambda: out
out.items = lambda: items
out.values = lambda: values
return out
def __getitem__(self, key):
try:
return next(v for (k, v) in self.items() if k == key)
except:
raise KeyError(key)
ReferenceURL : https://stackoverflow.com/questions/1617078/orderdict-for-older-versions-of-python
'IT박스' 카테고리의 다른 글
Visual Studio 2017에서 WiX 프로젝트를 활성화하는 방법 (0) | 2020.12.25 |
---|---|
웹 아카이브의 WEB-INF 디렉토리에서 리소스를로드하는 방법 (0) | 2020.12.25 |
new 대신 GWT.create ()를 사용하는 이유는 무엇입니까? (0) | 2020.12.25 |
JavaScript의 array.clear ()가 함수가 아닙니까? (0) | 2020.12.25 |
SQL Server: IF EXISTS ; ELSE (0) | 2020.12.25 |