2016-11-01 8 views
1

에서 하나의 값을 부를 수 있습니다. 여기저기서 몇 단어를 섞어 보았습니다. 이 예는 현재까지의 의도보다 약간 명확하게 작성해야합니다.2 차원 사전을 만들면

예 : 나는 .CSV 파일은 "file.csv"라는 한 :

T2Y;Brad;0001 
K5;Jan;0002 
T21;En;3838 
T22;aps;3804 
T11;Jyke;3957 
T08;John;3825 
K05;Tim;0001 

그리고 때 당신이 그렇게처럼 내 함수를 호출하면 값을 호출 할 수 있습니다

>>> dict = function("file.csv") 

당신 이렇게 부탁하십시오 :

>>> dict['Brad']['code'] 
'T2Y' 
>>> dict['John']['name'] 
'John' 

제 생각에는 제대로 작성된 것으로 보이는 첫 번째 사전을 r .csv 파일을 처리하고 있지만 내 예제에서와 같은 방법으로 호출 할 수있는 중첩 된 사전을 만들 수 없습니다. 나는 아래의 산책에서 좀 더 깊이 들어가려고 노력한다. 내 현재 코드 정보, 아마 중복 정보

을 뱉어 그리고 내 현재 코드가 나는 즉시 중첩 사전에 그것을 형성하기 위해 시도 이후 혼란의 비트,하지만 어떻게 여기

입니다 이 시점에서 .csv 파일을 열고 읽음으로써 행을 ";"로 나눕니다. 이름을 키로 호출 할 수있는 각 행의 사전을 만듭니다. 그러나 현재의 장애물은 하나의 키 (이름)로만 호출 할 수 있으며 전체 행을 사전이나 그 부분을 나타내는 것으로 반환합니다. 그래서 같이 : 나는 이름 키 후 다른 키를 추가하려고하면

>>> dict = function("file.csv") 
>>> dict['Brad'] 
'T2Y;Brad;0001\n' 

그리고,이 코드는 오류 코드 중지 :

언급 한 바와 같이
TypeError: list indices must be integers or slices, not str 
+1

당신이 그렇게 한 우리는 당신이 더 나은 도움을 수있는 몇 가지 코드를 제공 할 수 있습니까? – MooingRawr

+1

'function [name] [code]'는'function'이라는 사전의 사전에있는 값에 접근하는 데 사용할 수 있습니다.하지만 확실히 함수 호출은 아닙니다. 파이썬에서 함수 호출은'func (name, code)'와 같이 괄호를 사용합니다. –

+1

당신이 원하는 것이 분명하지 않습니다. 'function [ 'T11'] [ '3957']'에 대한 사전 항목에 대해 어떤 가치가 있습니까? – holdenweb

답변

0

, 이것은 매우 간단한 문제이다 : 당신이 만들 CSV 파일에 정보가 포함 된 중첩 사전. 세 번째 열의 내용을 지정하지 않으므로이 열을 id으로 표시하고 문자열을 사용합니다. 파일에 각 이름에 대해 한 줄만 포함한다고 가정합니다. 그렇지 않은 경우 최신 줄이 사용됩니다.

import csv 

user_info = {} 
with open('data.txt') as csvfile: 
    data = csv.reader(csvfile, delimiter=';') 
    for code, name, id in data: 
     user_info[name] = { 'code': code, 'name': name, 'id': id } 

print (user_info) 

이 인쇄됩니다 :

{'En': {'id': '3838', 'code': 'T21', 'name': 'En'}, 'Tim': {'id': '0001', 'code': 'K05', 'name': 'Tim'}, 'Jan': {'id': '0002', 'code': 'K5', 'name': 'Jan'}, 'aps': {'id': '3804', 'code': 'T22', 'name': 'aps'}, 'John': {'id': '3825', 'code': 'T08', 'name': 'John'}, 'Jyke': {'id': '3957', 'code': 'T11', 'name': 'Jyke'}, 'Brad': {'id': '0001', 'code': 'T2Y', 'name': 'Brad'}} 
+0

그게 도움이 돼서 고마워. – Grak

+0

@Grak 문제가 해결 된 경우 응답을 upvote/accept하십시오. – brianpck

+0

이전에 생각했던 것 같지만 등록하지 않은 것 같습니다. 끝난 – Grak