TypeError: list indices must be integers or slices, not str dictionary python
10,173
The line:
res = sorted(res)
isn't returning what you think it is. Using sort
on a dictionary will sort its keys and return them as a list.
When you do res[key]
inside the context manager, you're indexing the list with a string, resulting in an error.
If you want ordering in your dictionary you can do it in one of two ways:
Rename the list you create:
sorted_keys = sorted(res)
and then iterate through those while indexing the still referencing to the dict
name res
.
or, use OrderedDict
and then iterate through its members as you would with a normal dict:
from collections import OrderedDict
# -- skipping rest of code --
# in the context manager
for key, val in OrderedDict(res):
# write to file
Author by
Tukanoid
Updated on June 04, 2022Comments
-
Tukanoid almost 2 years
Here's the code:
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)
And here's the error:
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