딕셔너리 key 변경하기

반응형
    반응형

    딕셔너리를 미리 만들었는데 key가 잘못되서 바꾸고 싶을 때가 있는데 그런 경우 해당 key를 변경할 수 있습니다.

     

     

    준비

    cap_dict

     

    cap_dict은 미국 s&p500의 코드와 시가총액을 묶어놓은 딕셔너리입니다.

    근데 코드가 아니라 종목명으로 key를 했어야 했는데 그러지 못했습니다. 종목명으로 바꾸려면 key를 각각 바꿔야 합니다. 이럴 때 다음과 같이 합니다.

     

    일단 현재 상황은 코드에 맞는 종목명을 가져와야 바꿀 수 있습니다. 바꿀게 있어야죠~!

    코드와 종목명이 연결된 pandas를 불러오겠습니다. 

     

    df_sp

     

    이 데이터는 s&p500의 코드와 종목명과 섹터와 산업으로 구성된 엑셀파일입니다. pandas로 불러왔습니다.

    현 데이터에서 코드와 종목명을 가져와 딕셔너리 key를 바꾸도록 하겠습니다.

     

    딕셔너리 key 바꾸기

    어떻게 바꾸냐 하면 pop을 이용합니다.

     

    dict[newkey] = dict.pop(oldkey)

     

     

    간단하게 새로운 newkey를 pop으로 내보낸 oldkey 자리에 넣으면 됩니다.

    pop을 하면 value 값을 내보내고 기존의 데이터는 지워지기 때문에 가능합니다.

    저희는 한번에 다 할 것이므로 for 문을 이용하겠습니다.

    그런데 딕셔너리에서 바로 하면 오류가 생깁니다.

     

    for key in cap_dict.keys():
        print(key)
        name = df_sp[df_sp['Symbol']==key].Name.values[0]
        cap_dict[name]=cap_dict.pop(key)

     

    key를 print 했는데 마지막을 보면 이미 name으로 바뀐 게 다시 나오는 현상이 발생합니다.

    그러면서 일부는 하지 못하고 그대로 끝이 납니다. 

     

    이 이유는 우리가 for문을 하는 곳이 딕셔너리라서 그렇습니다.

    딕셔너리의 key가 계속 바뀌고 있기 때문에 했던 것을 다시 가져올 수 있습니다.

    그러니 for문을 돌리는 공간은 변하지 않는 고정된 상태여야 합니다.

    그래서 코드로 구성된 key를 list로 저장하고 for문을 돌립니다.

     

    for key in list(cap_dict.keys()):
        name = df_sp[df_sp['Symbol']==key].Name.values[0]
        cap_dict[name]=cap_dict.pop(key)
    cap_dict

     

    오류없이 key를 변경하였습니다.

     

    댓글

    Designed by JB FACTORY

    ....