파이썬 딕셔너리의 키와 값이 자꾸 바뀝니다..
조회수 991회
for _ in range(NUM_OF_STRING):
sortedDict[_] = {str(string[_]), sortIndexArr[_]}
for __ in range(NUM_OF_STRING):
print(sortedDict[__])
이게 코드인데, 실행을 시켜보면
{0, "['P', 'S', 'R', 'S', 'P', 'P', 'S', 'E', 'P', 'E', 'R', 'S', 'R', 'R', 'P', 'S', 'P', 'R']"}
{0, "['P', 'S', 'D', 'S', 'P', 'E', 'E', 'P', 'P', 'E', 'S', 'E', 'D', 'E', 'D', 'P', 'E', 'S']"}
{0, "['R', 'R', 'D', 'D', 'E', 'E', 'D', 'P', 'P', 'D', 'E', 'D', 'D', 'D', 'D']"}
{0, "['R', 'R', 'R', 'P', 'R', 'S', 'S', 'S', 'E', 'E', 'D', 'S', 'S', 'R', 'D', 'E', 'P', 'S', 'R']"}
{0, "['S', 'S', 'E', 'S', 'R', 'E', 'P', 'P', 'S', 'R', 'E', 'D', 'R', 'P', 'R', 'E', 'S', 'D', 'P']"}
{0, "['E', 'S', 'P', 'D', 'D', 'S', 'R', 'D', 'D', 'D', 'D', 'D', 'E', 'R']"}
{0, "['E', 'P', 'S', 'S', 'D', 'S', 'R', 'D', 'P', 'P', 'S', 'P', 'D', 'R', 'S']"}
{"['D', 'R', 'R', 'S', 'E', 'R', 'P', 'R', 'R', 'P', 'E', 'P', 'R', 'S', 'D', 'S', 'D', 'E']", 0}
{"['P', 'D', 'S', 'S', 'P', 'E', 'E', 'P', 'R', 'R', 'P', 'E', 'D', 'R', 'E', 'R', 'E', 'D', 'R']", 0}
{"['P', 'R', 'R', 'S', 'S', 'R', 'E', 'R', 'P', 'S', 'R', 'D', 'R', 'E', 'S', 'R', 'S', 'R', 'P', 'S']", 0}
이런 식으로 왼쪽에 sortIndexArr[_]
의 값이 나올때도 있고, string[_]
의 값이 나올 때도 있네요..
string[_]
의 값이 리스트 안의 문자 여러개이고
sortIndexArr[_]
의 값이 숫자 입니다.
2 답변
-
sortedDict[k]
가set
이라서 순서가 없죠. (내부적으로는 있겠지만.) 그래서list
나tuple
하고는 다르게print
하면 순서없이 나오는 거죠. -
(수정됨) 아래 답변은 잘못된 답변이므로 무시하셔도 됩니다.
OrderedDict
https://www.geeksforgeeks.org/ordereddict-in-python/
이걸 사용하시면 됩니다.
다만, 파이썬 3.7부터는 그냥 dictionary도 삽입 순서를 기억하고 있기 때문에 단순 이터레이션에서 순서를 보장하는 정도로만 사용하려면 비교적 메모리를 더 차지하는 OrderedDict의 사용이 불필요하게 되었습니다.
https://docs.python.org/3/library/collections.html#ordereddict-objects
댓글 입력