IT박스

이전 버전의 Python 용 OrderedDict

itboxs 2020. 12. 25. 09:06
반응형

이전 버전의 Python 용 OrderedDict


정렬 된 사전은 매우 유용한 구조이지만 안타깝게도 3.12.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


또한 futurepy2-3 호환 코드베이스를 시도해 볼 수 있습니다 .

  1. futurepip를 통해 설치 :

pip install future

  1. 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

반응형