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
Share:
10,173
Tukanoid
Author by

Tukanoid

Updated on June 04, 2022

Comments

  • Tukanoid
    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