>

내가 가진 사전은 여기있다

propertyList = {
    "id":           "int",
    "name":         "char(40)",
    "team":         "int",
    "realOwner":    "int",
    "x":            "int",
    "y":            "int",
    "description":  "char(255)",
    "port":         "bool",
    "secret":       "bool",
    "dead":         "bool",
    "nomadic":      "bool",
    "population":   "int",
    "slaves":       "int",
}

그러나 "\ n".join (myDict)으로 출력하면 이것을 얻을 수 있습니다

name
nomadic
dead
port
realOwner
secret
slaves
team
y
x
population
id
description

사전이 정렬되지 않은 것을 알고 있지만 매번 동일하게 나오며 이유를 모르겠습니다.


  • 답변 # 1

    이전 버전의 Python의 경우 실제 질문은"왜 그렇지 않습니까?"— 일반적으로 정렬되지 않은 사전은 요소 순서가 잘 정의되어 있지만 즉시 명확하지 않은 해시 테이블로 구현됩니다 (Python 문서는 상태를 나타내는 데 사용됨) 이). 관찰 결과는 해시 테이블의 규칙과 완벽하게 일치합니다. 명백한 임의적이지만 일정한 순서입니다.

    파이썬은 dict 를 변경했습니다.  삽입 순서를 유지하기위한 구현이며, 이것은 파이썬 3.7부터보장됩니다. 따라서 구현은 더 이상 순수한 해시 테이블을 구성하지 않습니다 (그러나 구현시 해시 테이블은 여전히 ​​사용됩니다).

  • 답변 # 2

    내장 사전 유형의 스펙 순서를 보존하지 않으면 사전을 정렬되지 않은 key: value 세트로 생각하는 것이 가장 좋습니다.  쌍 ...

    OrderedDict 를 확인하고 싶을 수도 있습니다  키 삽입 순서를 사용하여 정렬 된 사전을 구현하는 모듈입니다.

  • 답변 # 3

    사전 정렬에 대한 유일한 것은 사전을 수정하지 않으면 순서가 동일하게 유지된다는 것입니다. 예를 들어 사전을 수정하지 않고 두 번 반복하면 동일한 키 시퀀스가 ​​생성됩니다. 그러나 파이썬 사전의 순서는 결정 론적이지만 삽입 및 제거 순서와 같은 요소의 영향을받을 수 있으므로 동일한 사전은 다른 순서로 끝날 수 있습니다.

    >>> {1: 0, 2: 0}, {2: 0, 1: 0}
    ({1: 0, 2: 0}, {1: 0, 2: 0})
    >>> {1: 0, 9: 0}, {9: 0, 1: 0}
    ({1: 0, 9: 0}, {9: 0, 1: 0})
    
    

관련 자료

  • 이전 c - serialPort에서 모든 정보를 쓰도록 파일 만들기
  • 다음 arrays - 자바 스크립트 요소 계층에서 루프를 감지하는 방법