2011-12-21 9 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を使用したいと思います。この場合、異なる文字列を1,2,3,4のような識別子を追加する方法を今Pythonでリストのインデックスとしてstringを使用する方法

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

しかし:私は、このエラーメッセージが表示されましたFYFSYJDHSJ

:動画IDの実際のデータは、このような異なる文字列ですか?

答えて

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に何か他のものを呼び出すと、組み込みのdictがシャドウされないようにすることをお勧めします。

0

を上記で示唆したように、辞書を作成することが最も理想的なコードを実装することです。 。あなたがして何かをすることができるだろう

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

:(あなたはそれは、Pythonに重要な何かを手段として、dictそれらを呼び出すことは避けるべきですが、

あなたのコードは@aixはすでに上掲載していたもののようなものに見えるかもしれません辞書dがコードの後ろにあることを覚えておいてください。この辞書を繰り返すと、ループが完了するまでdを使用しないと、最後の値しか得られません。

関連する問題