简体   繁体   中英

TypeError: list indices must be integers or slices, not str dictionary python

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM