선언된 순서대로 키/값을 유지하는 방법
저는 특정 순서로 신고한 사전을 가지고 있기 때문에 항상 그 순서로 보관하고 싶습니다.키/값은 값을 기준으로 정렬할 수 없습니다. 선언한 순서대로 정렬하고 싶을 뿐입니다.
내가 사전을 가지고 있다면:
d = {'ac': 33, 'gw': 20, 'ap': 102, 'za': 321, 'bs': 10}
그것을 보거나 반복하면 그 순서가 아닙니다만, Python이 제가 키/값을 선언한 명확한 순서를 확실히 지킬 수 있는 방법은 없습니까?
3. Python 3.6 후 from 。dict
은 기본적으로합니다.type은 삽입 순서를 유지합니다.
정의
d = {'ac':33, 'gw':20, 'ap':102, 'za':321, 'bs':10}
그러면 키가 소스 코드에 나열된 순서대로 사전이 생성됩니다.
이는 스파스 해시 테이블에 정수가 포함된 단순 배열을 사용하여 실현되었습니다.이 경우 이러한 정수는 키-값 쌍(및 계산된 해시)을 저장하는 다른 배열로 인덱싱됩니다.이 후자의 어레이는 아이템을 삽입 순서대로 저장했을 뿐이며, 실제로 전체 조합은 Python 3.5 및 그 이전에 사용된 구현보다 적은 메모리를 사용합니다.자세한 내용은 Raymond Hettinger의 오리지널 아이디어 게시물을 참조하십시오.
3.6에서는 여전히 구현 세부 사항으로 간주되었습니다. Python 3.6의 새로운 기능 설명서를 참조하십시오.
이 새로운 구현의 순서 유지 측면은 구현의 세부 사항으로 간주되어 신뢰할 수 없습니다(이는 미래에 변경될 수 있지만 현재 및 미래의 모든 Pytho에 대해 순서 유지 시멘틱스를 의무화하는 언어 사양을 변경하기 전에 몇 가지 릴리스에서 이 새로운 dict 구현을 언어로 하는 것이 좋습니다).n 구현. 또한 Python 3.5와 같은 랜덤 반복 순서가 여전히 유효한 이전 버전의 언어와의 하위 호환성을 유지하는 데 도움이 됩니다.
Python 3.7은 이 구현 세부사항을 언어 사양으로 높입니다. 따라서 이제 필수적으로 다음을 수행해야 합니다.dict
는 해당 버전 이상과 호환되는 모든 Python 구현에서 순서를 유지합니다.BDFL의 발표를 참조해 주세요.Python 3.8에서 사전은 역방향 반복도 지원합니다.
이 클래스는 표준 기능 외에 몇 가지 추가 기능을 제공하므로 경우에 따라서는 계속 사용할 수 있습니다.dict
예를 들어 가역성(뷰 오브젝트까지 확장) 및 재정렬 지원(메서드를 통한) 등입니다.
from collections import OrderedDict
OrderedDict((word, True) for word in words)
포함하다
OrderedDict([('He', True), ('will', True), ('be', True), ('the', True), ('winner', True)])
값이 다음과 같은 경우True
의 객체)를 사용할
OrderedDict.fromkeys(words, True)
이론적인 부분을 설명하기보다는 간단한 예를 들겠습니다.
>>> from collections import OrderedDict
>>> my_dictionary=OrderedDict()
>>> my_dictionary['foo']=3
>>> my_dictionary['aol']=1
>>> my_dictionary
OrderedDict([('foo', 3), ('aol', 1)])
>>> dict(my_dictionary)
{'foo': 3, 'aol': 1}
이 답변은 python3.7 이전 버전의 python에 적용됩니다.CPython 3.6은 대부분의 상황에서 구현 세부사항으로 삽입 순서를 유지합니다.Python 3.7 이후부터는 구현이 규정을 준수하기 위해 삽입 순서를 유지해야 한다고 선언되었습니다.
python 사전이 정렬되지 않았습니다.정렬된 사전을 원할 경우 컬렉션을 사용해 보십시오.주문된 딕트
OrderedDict는 python 2.7에서 표준 라이브러리에 도입되었습니다.이전 버전의 python이 있는 경우 ActiveState에서 정렬된 사전의 레시피를 찾을 수 있습니다.
사전에서는 검색을 효율적으로 하는 순서를 사용합니다.이 순서를 변경할 수 없습니다.
오브젝트 리스트(심플한 케이스의 경우 2개의 요소 태플 또는 클래스)를 사용하여 마지막에 항목을 추가할 수 있습니다.그런 다음 선형 검색을 사용하여 항목을 찾을 수 있습니다.
또는 순서를 유지하기 위해 작성된 다른 데이터 구조를 만들거나 사용할 수 있습니다.
Ordered Dict를 어떻게 작동시킬지 고민하다가 이 게시물을 발견했습니다.PyDev for Eclipse는 OrderDict를 전혀 찾을 수 없었기 때문에 사전의 주요 값을 주문하고 싶은 대로 튜플화하기로 했습니다.목록을 출력할 필요가 있을 때는 태플 값을 반복하고 태플에서 반복된 키를 사전에 꽂아 필요한 순서대로 값을 가져옵니다.
예:
test_dict = dict( val1 = "hi", val2 = "bye", val3 = "huh?", val4 = "what....")
test_tuple = ( 'val1', 'val2', 'val3', 'val4')
for key in test_tuple: print(test_dict[key])
좀 번거롭긴 하지만 시간이 촉박하고 제가 생각해낸 해결책입니다.
주의: 다른 사람이 제안한 목록 접근법은 제게는 의미가 없습니다.왜냐하면 목록은 정렬되고 색인화되기 때문입니다(또한 사전과는 다른 구조이기 때문입니다).
을 사용하다요.d = {'ac':33, 'gw':20, 'ap':102, 'za':321, 'bs':10}
창조했다.이미 만들어 놓은 상태에서는 정리할 방법이 없다는 것을 알았습니다.오브젝트 대신 json 파일을 만들었습니다.
{"ac":33,"gw":20,"ap":102,"za":321,"bs":10}
사용:
r = json.load(open('file.json'), object_pairs_hook=OrderedDict)
사용:
print json.dumps(r)
검증할 필요가 있습니다.
from collections import OrderedDict
list1 = ['k1', 'k2']
list2 = ['v1', 'v2']
new_ordered_dict = OrderedDict(zip(list1, list2))
print new_ordered_dict
# OrderedDict([('k1', 'v1'), ('k2', 'v2')])
또 다른 대안은 판다가 딕트식 구조로 품목의 순서와 색인 위치를 보장해 주는 것이다.
저도 장고 프로젝트를 개발할 때 비슷한 문제가 있었습니다.이전 버전의 python을 실행하고 있었기 때문에 Ordered Dict를 사용할 수 없었습니다.따라서 해결책은 Django의 Sorted Dict 클래스를 사용하는 것이었습니다.
https://code.djangoproject.com/wiki/SortedDict
예.,
from django.utils.datastructures import SortedDict
d2 = SortedDict()
d2['b'] = 1
d2['a'] = 2
d2['c'] = 3
주의: 이 답변은 원래 2011년부터입니다.만약 당신이 Python 버전 2.7 이상에 접근할 수 있다면, 당신은 현재 표준에 접근할 수 있을 것입니다.collections.OrderedDict
그 중 많은 예가 이 스레드에서 다른 사람들에 의해 제공되고 있습니다.
일반적으로 사전처럼 동작하는 클래스를 설계할 수 있으며 주로 메서드를 구현할 수 있습니다.__contains__
,__getitem__
,__delitem__
,__setitem__
그리고 더 많은 것들이요.이 클래스는 정렬된 반복자를 키 위에 두는 등 원하는 동작을 할 수 있습니다.
사전을 특정 순서로 갖고 싶다면 목록 목록을 만들 수도 있습니다. 여기서 첫 번째 항목은 키가 되고 두 번째 항목은 값이 되며 이 예시와 같습니다.
>>> list =[[1,2],[2,3]]
>>> for i in list:
... print i[0]
... print i[1]
1
2
2
3
당신은 나는 사전이 있는 같은 일을 할 수 있다.
:명단과 빈 사전 만들기.
dictionary_items = {}
fields = [['Name', 'Himanshu Kanojiya'], ['email id', 'hima@gmail.com']]
l = fields[0][0]
m = fields[0][1]
n = fields[1][0]
q = fields[1][1]
dictionary_items[l] = m
dictionary_items[n] = q
print dictionary_items
언급URL:https://stackoverflow.com/questions/1867861/how-to-keep-keys-values-in-same-order-as-declared
'sourcecode' 카테고리의 다른 글
Python의 두 날짜 차이 (0) | 2022.09.04 |
---|---|
Larabel 테이블 열 유형을 변경할 수 없습니다. (0) | 2022.09.04 |
jsdoc에서 "object" 인수를 어떻게 설명합니까? (0) | 2022.09.04 |
JUnit 4 테스트 스위트 (0) | 2022.09.04 |
Python에서 설정 파일을 사용하는 베스트 프랙티스는 무엇입니까? (0) | 2022.09.04 |