파이썬 csv 파일을 읽어 팀별로 선수를 묶어 딕셔너리에 저장하기

조회수 1195회

현재 dictionary와 list를 독학하고있는데. 도저히 알수없는 부분이 있어 올립니다.

우선, 해당 csv 파일을 파이썬에 with open을 써서 열어놓은 상태입니다.

import csv

with open("practice.csv") as f:
    file = csv.reader(f)
    file = list(file)

csv 파일은 간단하게 이렇게 작성했습니다.

team name player name
A a
B b
A aa
D d
B bb
A aaa
D dd

만약 제가 팀A에 있는 선수들 따로 팀 B에 있는 선수들 따로 모아서 dictionary에 저장하고 싶으면 어떻게 해야 할까요?

예를 들어 print(new_dict)을 실행하면 터미널에 ( new_dict은 제가 모든 정보를 저장하고 싶은 dictionary 입니다. ) {'A': '팀A에 있는 선수들 이름', 'B': '팀B에 있는 선수들 이름 ..} 이런식으로 나오게 하고싶습니다.

감사합니다.

수정

제가 혼자서 적어본 코드 입니다.

import csv

with open("practice.csv") as f:
    file = csv.reader(f)
    file = list(file)

new_dict = {}
new_dict[file[1][0]] = file[1][1]

i = 2

while (i<len(file)):
    if file[i][0].lower() == "a":
        new_dict[file[1][0]] += (f' {file[i][1]}')
        i += 1
    else:
        new_dict[file[i][0]] = file[i][1]
        i += 1

print (new_dict)

이걸 Run 해보면 {'A': 'a aa aaa', 'B': 'bb', 'D': 'dd'}이라고 나오는데 왜 이렇게 나오는지 이해는 가는데 어떻게 수정해야 될지 모르겠습니다.

  • 수정을 해야 하나요? 해야 한다면 왜 해야 하나요? 무엇을 기대하였고 실제로 얻은 것은 무엇이었나요? 엽토군 2021.11.22 15:21
  • 코드 텍스트로 작성해 주세요. 답변하는 사람도 쉽게 돌려볼 수 있도록요. 백틱(`) 세 개로 된 라인으로 코드 위아래를 감싸면, 코드블럭이 됩니다. nowp 2021.11.22 16:02
  • 코드블럭이란 기능이 있었나요? 감사합니다 앞으로 꼭 사용하도록 하겠습니다. 알 수 없는 사용자 2021.11.23 10:33

2 답변

  • 전체적인 방향지시만 해드리자면 다음과 같습니다...

    먼저 참고 출처는 : https://devpouch.tistory.com/55 이 사이트에서 찾아온 내용입니다.

    검색자 -> 구글에서 "파이썬 CSV" 로 검색해서 찾았습니다.(구글 검색을 생활화 합시다!)

    csv 파일을 받아오는 방법

    import csv
    
    f = open('example.csv','r')
    rdr = csv.reader(f)
    
    for line in rdr:
        print(line)
    
    f.close()
    
    ->(실행결과 예시)
    ['A', 'a']
    ['B', 'b']
    ['A', 'aa']
    ['D', 'd']
    

    이 코드에서 line이 엑셀의 매 행마다 데이터를 불러오고 있는 중입니다. csv.reader(f)을 rdr이라는 변수에 담고, 이를 for문으로 돌리면 csv가 출력 된다고 합니다. 즉 위의 for문에서 print(line)대신 다른 변수에 line을 append하기만 해도 리스트 형태로 데이터가 저장된다는 거죠.

    이후 또 다른 반복문으로 리스트의 첫 번째 값(A팀, B팀)을 꺼내서 A인지 B인지 if문으로 확인 후 team_A, team_B라는 전역변수에 담아주기만 하면 됩니다.

    코드 짜시는 건 되시는 것 같으니 세부 타이핑은 해보시길...

  • 이런 건 사실 pandas 로 하는 게 훨씬 편리합니다. 코드도 가독성이 좋고요.

    import pandas as pd
    
    df = pd.read_csv("practice.csv")
    
    # print(df)
    
    grouped = df.groupby("team name")["player name"].agg(lambda x: ' '.join(x))
    
    print(grouped.to_markdown())
    # ->
    # | team name   | player name   |
    # |:------------|:--------------|
    # | A           | a aa aaa      |
    # | B           | b bb          |
    # | D           | d dd          |
    
    new_dict = {}
    for k, g in df.groupby("team name"):
        # print(k)
        # print(' '.join(g["player name"]))
        new_dict[k] = ' '.join(g["player name"])
    
    print(new_dict)    
    # -> {'A': 'a aa aaa', 'B': 'b bb', 'D': 'd dd'}
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)