Hi Hi

'파이썬 해시'에 해당되는 글 1건

  1. 파이썬(python) - 해시(데이터 제자리에 넣기)

파이썬(python) - 해시(데이터 제자리에 넣기)

 

앞에 사용했던 예제를 계속 하고 있습니다.

results.txt  내용

 


scores = []
names = []  // 점수 배열뿐만 아니라 이름 배열도 필요
result_f = open("c://results.txt")
for line in result_f:
    (name, score) = line.split()
    scores.append(float(score))
    names.append(name)  // 사람이름을 이름 배열에 추가한다.
result_f.close()
scores.sort()
scores.reverse()
names.sort()  // 이름배열을 정의한다.
names.reverse()
print("The highest score was:")
print(names[0] + ' with ' +str(scores[0]))
print(names[1] + ' with ' +str(scores[1]))
print(names[2] + ' with ' +str(scores[2]))







점수와 사람이름 간의 연결에 문제가 생겼네요.
두 배열이 서로 아무런 연관이 없다. 한 배열은 점수를 저장하고 있고, 다른 배열은 단지 이름을 저장하고 있다.
이름과 점수를 분리하고 배열에 저장했을 때에는 이 연결이 끊어진다.

이것을 어떻게 고칠까요 ?
사람이름과 성적 간의 연결을 유지할 수 있는 다른 데이터 구조를 사용해야 한다.
※데이터 구조란 ? 컴퓨터 메모리의 데이터 항목들을 구조화 하는 표준 방법론을 말함.

 해시 - 정확히 두개의 열만 갖지만 수많은 행을 가지는 구조체
해시는 매핑(mapping),딕셔너리(dictionary), 연관 배열(associative array), 키-값 목록(key-value list) 등 여러 프로그래밍 언어마다 다른이름으로 불려진다.


빈 해시 구조체로 시작한다.

scores = {} // 여기서 중괄호를 사용하는 것에 유의
빈 해시가 socres 변수에 할당되었다. 

키와 값 사이의 연관성을 기술하여 기존 해시에 데이터를 추가 한다.

 




scores = {}  // 빈 배열이 아니라 빈 해시에서 시작해야 한다.
result_f = open("c://results.txt")
for line in result_f:
    (name, score) = line.split()
    scores[score] = name  // 이름과 점수를 분리한 후에는 score를 해시의 키로, name를 해시의 값으로 저장한다.
result_f.close()
print("The highest score was:")
for each_score in scores.keys():  // for루프를 사용하여 해시의 데이터를 반복 처리한다.
    print(scores[each_score] + 'scored' + each_score)  //해시의 각 데이터 라인을 화면에 출력한다.

 



 







파이썬 해시는 sort() 메소드를 갖고 있지 않습니다...

...그러나 sorted() 라는 함수가 있습니다.

print("The highest score was:")
for each_score in sorted(sscores.keys(), reverse = true):  // scores 해시의 키를 정렬하려면 sorted() 함수를 사용한다.
    print( scores[each_score] + 'scored' + each_score)