파이썬(python) - 해시(데이터 제자리에 넣기)
앞에 사용했던 예제를 계속 하고 있습니다.
results.txt 내용
점수와 사람이름 간의 연결에 문제가 생겼네요.
두 배열이 서로 아무런 연관이 없다. 한 배열은 점수를 저장하고 있고, 다른 배열은 단지 이름을 저장하고 있다.
이름과 점수를 분리하고 배열에 저장했을 때에는 이 연결이 끊어진다.
이것을 어떻게 고칠까요 ?
사람이름과 성적 간의 연결을 유지할 수 있는 다른 데이터 구조를 사용해야 한다.
※데이터 구조란 ? 컴퓨터 메모리의 데이터 항목들을 구조화 하는 표준 방법론을 말함.
해시 - 정확히 두개의 열만 갖지만 수많은 행을 가지는 구조체
해시는 매핑(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를 해시의 값으로 저장한다.
파이썬 해시는 sort() 메소드를 갖고 있지 않습니다...
...그러나 sorted() 라는 함수가 있습니다.
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) // 사람이름을 이름 배열에 추가한다.
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()
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]))
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) //해시의 각 데이터 라인을 화면에 출력한다.
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)
for each_score in sorted(sscores.keys(), reverse = true): // scores 해시의 키를 정렬하려면 sorted() 함수를 사용한다.
print( scores[each_score] + 'scored' + each_score)
'' 카테고리의 다른 글
파이썬(python) - 데이터베이스 (0) | 2011.10.28 |
---|---|
파이썬(python) - 함수에서 구조화된 데이터 반환 (1) | 2011.10.28 |
파이썬(python) - 해시(데이터 제자리에 넣기) (0) | 2011.10.27 |
파이썬(python) - 이터레이터(iterator), 제너레이터(generator) (0) | 2011.10.27 |
파이썬(python)-배열 & 메소드(데이터 정렬하기) 2 (0) | 2011.10.26 |
파이썬(python) -배열 안의 데이터(데이터 정렬하기) 1 (2) | 2011.10.26 |
댓글을 달아 주세요