일부 코드 : 나는있는 StringIO 객체를 코드에서 텍스트를 넣어 포장 한
text_data = """'1990-01-01','f','2'
'1990-01-02','c','4'
'1990-01-01','j','2.5'
'1990-01-01','j','1.5'
'1990-01-02','b','3.9'
"""
import csv
from StringIO import StringIO
from operator import itemgetter
from itertools import groupby
temp = StringIO(text_data)
tabular = list(csv.reader(temp, quotechar="'"))
tabular.sort(key=lambda L: (L[0], float(L[2]))
for key, val in groupby(tabular, itemgetter(0)):
print next(val) # or do something appropriate
는 파일을 에뮬레이션 할 수 있지만, 일반적으로 사람은 CSV를 사용하여 텍스트를 열 것입니다. open()을 사용하여 파일을 읽습니다.
그런 다음 데이터는 데이터 열 (인덱스 0)과 값 열 (인덱스 2)로 정렬됩니다.이 정렬 순서에 따라 동일한 날짜가 함께 사용됩니다 ('비슷한'을 언급했음을 알지만이 제조법은 각 날짜에 대해 가장 낮은 값의 열이 먼저 나타납니다.
itertools.groupby()는 특정 조건과 일치하는 키를 반복하는 데 사용됩니다. 즉, 조건을 충족하는 키는 동일한 "그룹"에 있습니다. 'key'(그룹화되는 항목)는 날짜 값이고 'val'은 해당 키 내에서 사용 가능한 값의 또 다른 반복 가능 항목입니다. 첫 번째 만 필요하기 때문에 next (val)를 사용하면 결과가 가장 작은 값으로 반환됩니다.
출력은 다음과 같습니다
['1990-01-01', 'j', '1.5']
['1990-01-02', 'b', '3.9']
나는이 솔루션을 적용하려하지만 for 루프를 사용하여 행에 의해 CSV 파일의 행 읽기 때문에, 나는리스트의 목록을 만들 수있는 방법을 찾을 수 있도록 나는 그것을 분류 할 수있다. csv 파일에서 읽는 것이면 어떻게 될지 알려주시겠습니까? –
죄송합니다 - 이해가 안됩니다 - 목록이 이미 정렬되어 있습니다 - 좀 더 구체적으로 기재 해주십시오. –
나는하려고 : myInput = csv.reader (open (path)), 다음 줄 단위로 읽습니다 : for myInput : tableular = list (line), 여기서부터 사용하려고 정렬 : tabular.sort (key = lambda L : groupby (tabular, itemgetter (0))의 키 : val의 경우 : 다음 인쇄 (val) –