2009-04-05 4 views
6

나는 이것에 대한 많은 구현을 보았다. 최고로 간주되거나 표준으로 떠오르는 것이 있습니까?파이썬에서 가장 잘 정돈 된 사전 구현은 무엇입니까?

내가 주문한 dict의 의미는 객체가 PHP의 배열과 비슷한 키의 순서에 대한 개념을 갖고 있다는 것입니다.

odict PEP 372은 강력한 후보자처럼 보이지만 승자라는 것은 완전히 분명하지 않습니다.

+2

-1 : "최상"은 정의되지 않습니다. –

답변

8

표준을 보지 못했습니다. 모두가 자신의 역할을하는 것처럼 보입니다. (this question에 대한 답변 참조). PEP 372에서 OrderedDictpatch을 사용할 수 있다면 가장 좋은 방법입니다. stdlib에 포함 된 모든 것은 모두가 지금부터 1 년 또는 2 년 동안 사용하는 매우 높은 가능성을 가지고 있습니다.

12

레이몬드 Hettinger의이 하나가 드롭 인 대체 collections.OrderedDict 파이썬 2.7에 나타날 것입니다 : http://pypi.python.org/pypi/ordereddict

문서는 파이썬 2.7에있을 것입니다 무엇에 해당 말할 컬렉션의 DEV 버전, 그래서 아마 파이썬과 함께 올 것입니다.

당신이 easy_install ordereddict로를 설치하고과 같이 사용할 수 있도록 나는 PyPI에 넣어 한 다음 collections 모듈에 OrderedDict을

from ordereddict import OrderedDict 
d = OrderedDict([("one", 1), ("two", 2)]) 
+0

Raymond Hettinger의 명령은 collections.OrderedDict보다 짧고 우아합니다. 나는 collections.OrderedDict가 Raymond의 것보다 낫다고 생각했다. 어떻게 표준 패키지의 패키지가 다른 패키지만큼 좋지 않은가? – FrostNovaZzz

+0

@FrostNovaZzz collections.OrderedDict는 지금까지 훨씬 더 많은 사용을 보았습니다. 따라서 "부끄럽지 않은"차이점은 실제로 버그 수정이라고 생각합니다. – shoyer

1

파이썬 2.7 이상이이 같은 것을 고려해야하므로, '표준'. 그 기능이 충분하다면 아마 그것을 사용해야 할 것입니다.

그러나 구현 방법은 최소한이고 충분하지 않은 경우 Foord/Larossa 또는 ordereddict에 의해 odict (나에게 해당)을보아야합니다.이 경우 더 적합합니다. 두 구현은 collections.OrderedDict이 제공하는 기능의 상위 집합입니다. 둘 사이의 차이점은 odict은 순수한 파이썬이고 ordereddict은 훨씬 더 빠른 C 확장 모듈입니다.

최소한의 접근 방식은 필요한 기능을 모두 제공하더라도 반드시 좋을 수는 없습니다. collections.OrderedDictOrderedDictrepr()을 자체 값 중 하나로 중첩 할 때 처음에는 bug이었습니다. 이전에 발견되었을 수있는 버그에는 하위 집합 인 OrderedDict가 처리 할 수있는 작은 하위 집합 인 unittests of older의 ordereddict이 사용되었습니다.

+0

네 작품에 감사드립니다, 안톤! 나는 귀하의 명령을 받으려고했지만 귀하의 웹 사이트에있는 zip 및 tar 아카이브는 모두 죽었습니다. 또한이 프로젝트가 아직 살아 있는지 조금 걱정됩니다. 미래의 파이썬으로 업데이트 될 예정입니까? 또한, 아마도 그것을 pip에두면 대중적으로 만들 수 있을까요?귀하의 웹 사이트에서 7 배 빠른 속도를 보았습니다. 왜 파이썬 개발자가이 구현을 파이썬의 기본값으로 선택하지 않았는지 모르겠습니다. – jichi

+0

@jichi'ordersdict'를 [bitbucket] (https://bitbucket.org/ruamel/ordereddict)로 옮기고'pip'로 설치할 수있게하고 있습니다. tat 후에도 Python 3.X 호환성을 살펴볼 것입니다 (아마 collections.OrderedDict와 같은 기능을 가진, 버려진 버전을 기반으로 할 것입니다). 웹 사이트의 링크가 다시 작동해야합니다. – Anthon

+0

훌륭한 링크가 이제 작동합니다. 당신의 일에 감사드립니다! – jichi

2

collections.OrderedDict은 이제 널리 사용 가능하지만 성능이 문제가되는 경우 내 패키지 cyordereddict을 사용하는 것이 좋습니다. 표준 라이브러리 인 OrderedDict to Cython의 직접 포트이며 2-6 배 빠릅니다.

관련 문제