2011-12-21 4 views
0
 for line in f.readlines(): 
    (addr, vlanid, videoid, reqs, area) = line.split() 

    if vlanid not in dict: 
      dict[vlanid] = [] 

    video_dict = dict[vlanid] 

    if videoid not in video_dict: 
     video_dict[videoid] = [] 

    video_dict[videoid].append((addr, vlanid, videoid, reqs, area)) 

여기 내 코드입니다. 나는 목록으로 만들기 위해 인덱스로 videoid를 사용하고 싶습니다. 동영상 ID의 실제 데이터는 다음과 같이 서로 다른 문자열입니다 FYFSYJDHSJ문자열을 파이썬에서리스트의 인덱스로 사용하는 방법

내가이 오류 메시지가 있어요 :

video_dict[videoid] = [] 
TypeError: list indices must be integers, not str 

을하지만 지금은 방법이 경우에 다른 문자열 1,2,3,4 같은 식별자를 추가?

답변

2

변수 이름으로 dict을 사용하지 마십시오. (d 대신 dict의)이 시도 :

d = {} 
for line in f.readlines(): 
    (addr, vlanid, videoid, reqs, area) = line.split() 
    video_dict = d.setdefault(vlanid, {}) 
    video_dict.setdefault(videoid, []).append((addr, vlanid, videoid, reqs, area)) 
4

대신 사용 목록의 사전 :

if vlanid not in dict: 
    dict[vlanid] = {} 

P.S. 을 섀도 잉하지 않도록 dict 다른 것을 호출하는 것이 좋습니다.

0

을 위의 제안으로 사전을 만드는 것이 가장 이상적인 코드를 구현하는 것입니다. 그 파이썬 중요한 무언가를 의미로 (당신은 그들에게 dict를 호출하지 않도록해야하지만

@aix 이미 위에 게시 한 것을 같은 보일 수 있습니다 귀하의 코드 :. 당신이 뭔가를 할 수있을 것

for line in f.readlines(): 
    d = dict(zip(("addr", "vlanid", "videoid", "reqs", "area"), tuple(line.split()))) 

을 사전 d 나중에 코드가 반복됩니다.이 사전을 반복하면 루프가 완료 될 때까지 d을 사용하지 않으면 파일의 마지막 값만 가져옵니다.

관련 문제