2016-11-28 8 views
1

ここでは、コードです:はTypeError:リスト指数は、整数またはスライスではなく、strの辞書のpythonでなければなりません

with open("input.txt", "r") as f: 
text = f.read() 

alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 
res = {} 
kol = 0 
for buk in alphabet: 
    if buk in text: 
     kol += 1 

if kol > 0: 
    for bukwa in text: 
     if bukwa in alphabet: 
      if bukwa not in res: 
       res[bukwa.upper()] = text.count(bukwa) 
     elif bukwa not in alphabet: 
      if bukwa not in res: 
       res[bukwa.upper()] = 0 
    res = sorted(res) 

    with open("output.txt", "w") as f: 
     for key in res: 
      f.write(key + " " + str(res[key])) 

if kol == 0: 
    with open("output.txt", "w") as f: 
     f.write(-1) 

は、そして、ここでエラーです:

Traceback (most recent call last): 
    File "/home/tukanoid/Desktop/ejudge/analiz/analiz.py", line 23, in  <module> 
    f.write(key + " " + str(res[key])) 
TypeError: list indices must be integers or slices, not str 

答えて

1

ライン:

res = sorted(res) 

あなたが思うものを返すことはありません。 sortを辞書に使用すると、そのキーがソートされ、リストとして返されます。

コンテキストマネージャ内でres[key]を実行すると、文字列でインデックスが作成され、エラーが発生します。

あなたの辞書に注文したい場合は、次のいずれかの方法でそれを行うことができます。

は、作成リストの名前を変更:

sorted_keys = sorted(res) 

をしてから、まだへの参照をインデックス化しながら、それらを反復処理dictの名前はresです。

や、OrderedDictを使用して、あなたは、通常の辞書と同じようにそのメンバーを反復処理:助けを

from collections import OrderedDict 

# -- skipping rest of code -- 

# in the context manager 
for key, val in OrderedDict(res): 
    # write to file 
+0

TNXたくさん – Tukanoid

関連する問題