딕트를 OrderedDict로 변환하는 중
사용하는 데 문제가 있습니다.collections.OrderedDict
class. 저는 Raspebian에서 Python 2.7을 사용하고 있습니다. Raspebian의 Debian 디스트리뷰터는 Raspberry Pi입니다.텍스트 어드벤처를 위한 비교(병렬)를 위해 사전 두 개를 인쇄하려고 합니다.정확하게 비교하기 위해서는 순서가 필수적입니다.내가 무엇을 시도하든 사전은 보통 순서가 없는 방식으로 인쇄됩니다.
RPi에서 이 작업을 수행하면 다음과 같이 얻을 수 있습니다.
import collections
ship = {"NAME": "Albatross",
"HP":50,
"BLASTERS":13,
"THRUSTERS":18,
"PRICE":250}
ship = collections.OrderedDict(ship)
print ship
# OrderedDict([('PRICE', 250), ('HP', 50), ('NAME', 'Albatross'), ('BLASTERS', 13), ('THRUSTERS', 18)])
함수 호출을 인쇄하고 키와 값 그룹을 중첩된 목록에 넣는 것이기 때문에 분명히 잘못된 것이 있습니다.
다음은 PC에서 유사한 기능을 실행하여 얻은 것입니다.
import collections
Joe = {"Age": 28, "Race": "Latino", "Job": "Nurse"}
Bob = {"Age": 25, "Race": "White", "Job": "Mechanic", "Random": "stuff"}
#Just for clarity:
Joe = collections.OrderedDict(Joe)
Bob = collections.OrderedDict(Bob)
print Joe
# OrderedDict([('Age', 28), ('Race', 'Latino'), ('Job', 'Nurse')])
print Bob
# OrderedDict([('Age', 25), ('Race', 'White'), ('Job', 'Mechanic'), ('Random', 'stuff')])
이번에는 순서가 맞는데 다른 것들을 출력하면 안 되는 거죠? (목록에 넣고 함수 호출을 보여주는 것)
어디서 실수를 하는 거지?Python의 pi 버전은 Linux 버전이기 때문에 관련이 없을 것입니다.
먼저 사전을 만든 다음 사전을 다음으로 전달합니다.OrderedDict
Python 버전 < 3.6의 경우, 그렇게 할 때쯤이면 더 이상 순서가 정확하지 않을 것입니다. dict
본질적으로 순서가 없습니다.
대신 튜플 순서를 전달합니다.
ship = [("NAME", "Albatross"),
("HP", 50),
("BLASTERS", 13),
("THRUSTERS", 18),
("PRICE", 250)]
ship = collections.OrderedDict(ship)
인쇄할 때 표시되는 내용OrderedDict
그것은 표현이고, 그것은 전적으로 옳습니다. OrderedDict([('PRICE', 250), ('HP', 50), ('NAME', 'Albatross'), ('BLASTERS', 13), ('THRUSTERS', 18)])
단지 재현 가능한 표현으로, 당신에게 그 내용이 무엇인지 보여줄 뿐입니다.OrderedDict
.
(*)CPython 3.6 구현에서,dict
type은 삽입 순서를 보존하는 행복한 부작용을 가진 메모리 효율적인 내부 구조를 사용하도록 업데이트되었으며, 확장적으로 질문에 표시된 코드는 문제 없이 작동합니다.Python 3.7부터는 Python 언어 사양이 업데이트되어 모든 Python 구현이 이 동작을 따라야 합니다.자세한 내용과 여전히 사용하려는 이유에 대해서는 제 다른 답변을 참조하십시오.OrderedDict()
어떤 경우에는
딕트가 정의된 코드의 이 부분을 편집할 수 없는 경우에도 다음과 같이 원하는 방식으로 언제든지 딕트를 주문할 수 있습니다.
from collections import OrderedDict
order_of_keys = ["key1", "key2", "key3", "key4", "key5"]
list_of_tuples = [(key, your_dict[key]) for key in order_of_keys]
your_dict = OrderedDict(list_of_tuples)
ASC 등과 같은 일반적인 주문이 아닌 사용자 지정 주문이 필요한 경우 대부분 OrderDict를 사용합니다.
제안된 솔루션은 다음과 같습니다.
import collections
ship = {"NAME": "Albatross",
"HP":50,
"BLASTERS":13,
"THRUSTERS":18,
"PRICE":250}
ship = collections.OrderedDict(ship)
print ship
new_dict = collections.OrderedDict()
new_dict["NAME"]=ship["NAME"]
new_dict["HP"]=ship["HP"]
new_dict["BLASTERS"]=ship["BLASTERS"]
new_dict["THRUSTERS"]=ship["THRUSTERS"]
new_dict["PRICE"]=ship["PRICE"]
print new_dict
다음과 같이 출력됩니다.
OrderedDict([('PRICE', 250), ('HP', 50), ('NAME', 'Albatross'), ('BLASTERS', 13), ('THRUSTERS', 18)])
OrderedDict([('NAME', 'Albatross'), ('HP', 50), ('BLASTERS', 13), ('THRUSTERS', 18), ('PRICE', 250)])
참고: 항목이 삭제될 때 정렬된 새 사전은 정렬 순서를 유지합니다.그러나 새 키가 추가되면 키가 끝에 추가되고 정렬이 유지되지 않습니다. (공식 문서)
이전 딕트에서 순서가 지정된 딕트를 한 줄로 만들 수 있습니다.
from collections import OrderedDict
ordered_dict = OrderedDict(sorted(ship.items())
키에 의한 에 새로운 정렬 키는ordered_dict
오래된 딕트의 키로 정렬됩니다.
dict.items()를 사용합니다. 다음과 같이 간단합니다.
ship = collections.OrderedDict(ship.items())
이것이 대안이 되기를 바랍니다.건배!
import collections
ship = {"NAME": "Albatross",
"HP":50,
"BLASTERS":13,
"THRUSTERS":18,
"PRICE":250}
# unsequenced key value pair in the dict
print ship
# before using inherent dict for creating an OrderedDict
print collections.OrderedDict(ship)
# OrderedDict([('PRICE', 250), ('HP', 50), ('NAME', 'Albatross'), ('BLASTERS', 13), ('THRUSTERS', 18)])
list_key = ["NAME","HP","BLASTERS","THRUSTERS","PRICE"]
ordered_list = [(key,ship[key]) for key in list_key]
ordered_ship = collections.OrderedDict(ordered_list)
print ordered_ship
# OrderedDict([('NAME', 'Albatross'), ('HP', 50), ('BLASTERS', 13), ('THRUSTERS', 18), ('PRICE', 250)])
언급URL : https://stackoverflow.com/questions/15711755/converting-dict-to-ordereddict
'source' 카테고리의 다른 글
Oracle SQL 구문 - 여러 열에서 ISNOT NULL을 확인합니다. (0) | 2023.07.23 |
---|---|
소셜 로그인 구현을 위한 데이터베이스 구조? (0) | 2023.07.23 |
Tkinter 텍스트 위젯에서 입력을 가져오는 방법은 무엇입니까? (0) | 2023.07.18 |
Firebase 비동기 대기 스타일을 위한 클라우드 기능 (0) | 2023.07.18 |
What does it mean to squash commits in git? (0) | 2023.07.18 |