반복문으로 리스트 내 딕셔너리 생성을 어떻게 해야할까요?

조회수 674회

안녕하세요 파이썬 공부하는 학생입니다. 독학하다가 궁금한점이 생겨서 질문 남깁니다.

[이름, 나이, 지역]
[A, B, C]
[20, 21, 22]
[서울, 대전, 부산]

이런 리스트들을 딕셔너리로 묶고 싶은데요,

[{이름:A, 나이:20, 지역: 서울}, {이름:B, 나이:21, 지역: 대전}, {이름:C, 나이:22, 지역:부산}]

이런 아웃풋으로 만들려면 어떻게 만들어야 할까요?

1 답변

  • 방법은 여러가지가 있습니다.

    파이썬은 시퀀스형태의 자료구조에 대해서 일관성 있게 대합니다.

    쉽게 말해서 파이썬에서는 문자열, 배열, 리스트, 데이터베이스 결과 등등 이런 시퀀셜한 형태는 동일하게 반복, 슬라이싱, 연결 등을 처리할 수 있습니다.

    어떤 측면에서는 함수형 프로그래밍 같이 데이터 집합이 있다면 '자르고' '붙이는' 함수들을 합성해서 프로그래밍을 할 수 있다는 겁니다.

    정리하면 파이썬으로 프로그래밍 할 때는 데이터를 집합으로 만들어서 사고하도록 하면 좀 더 간결하게 프로그래밍 할 수 있습니다.

    • 기본 모듈인 collections 의 namedtuple 을 사용한 방법
    a = ['이름', '나이', '지역'] 
    b = ['A', 'B', 'C'] 
    c = [20, 21, 22] 
    d = ['서울', '대전', '부산']
    
    from collections import namedtuple
    
    user = namedtuple('user', a)
    [user(*record)._asdict() for record in zip(b, c, d)]
    
    [OrderedDict([('이름', 'A'), ('나이', 20), ('지역', '서울')]),
     OrderedDict([('이름', 'B'), ('나이', 21), ('지역', '대전')]),
     OrderedDict([('이름', 'C'), ('나이', 22), ('지역', '부산')])]
    
    • pandas 를 활용한 방법
    import pandas as pd
    
    pd.DataFrame(columns=a, data=zip(b, c, d)).to_dict('records')
    
    [{'이름': 'A', '나이': 20, '지역': '서울'},
     {'이름': 'B', '나이': 21, '지역': '대전'},
     {'이름': 'C', '나이': 22, '지역': '부산'}]
    
    • 기본모듈인 sqlite 를 활용한 방법
    import sqlite3
    
    conn = sqlite3.connect(":memory:")
    conn.row_factory = sqlite3.Row
    conn.execute("create table user('{}', '{}', '{}')".format(*a))
    for record in zip(b, c, d): 
        conn.execute("insert into user values(?, ?, ?)", record)
    
    [dict(record) for record in conn.execute("select * from user").fetchall()]
    conn.close()
    
    [{'이름': 'A', '나이': 20, '지역': '서울'},
     {'이름': 'B', '나이': 21, '지역': '대전'},
     {'이름': 'C', '나이': 22, '지역': '부산'}]
    

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

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

(ಠ_ಠ)
(ಠ‿ಠ)