(Python)尝试制作条形图时出错;TypeError:列表索引必须是整数或片,而不是str";

(Python)尝试制作条形图时出错;TypeError:列表索引必须是整数或片,而不是str";,python,numpy,matplotlib,Python,Numpy,Matplotlib,我试图让“inp==3:”生成一个条形图,其中包含代码中列出的前5个填充状态。我一直得到下面列出的错误,但我无法找出它。有人请帮忙 ` if inp == 3: sorted_states = sorted( state, key=lambda i: i['population'], reverse=True) fig = plt.figure(figsize=(10, 5))

我试图让“inp==3:”生成一个条形图,其中包含代码中列出的前5个填充状态。我一直得到下面列出的错误,但我无法找出它。有人请帮忙

`
if inp == 3:
            
            sorted_states = sorted(
                state, key=lambda i: i['population'], reverse=True)
            fig = plt.figure(figsize=(10, 5))

            sorted_states_names = []
            sorted_states_populations = []

            for x in sorted_states[:5]:
                sorted_states_names.append(x["state"])
                sorted_states_populations.append(x["population"])

            # creating the bar plot
            plt.bar(sorted_states_names, sorted_states_populations,
                    width=0.4)
            plt.show()
`
错误:

sorted_states = sorted(state, key=lambda i: i['population'], reverse=True)
TypeError: list indices must be integers or slices, not str
这是完整的代码…我更新了它,因为有人评论说,拥有完整的代码可能会有帮助,这样你就可以把它放在自己身上..我只是想节省发布完整代码的时间:

`
import numpy as np
import matplotlib.pyplot as plt

state = []

state.append ( ['Alabama', 'Montgomery', 4887680, 'Camellia'] )
state.append ( ['Alaska', 'Juneau', 735139, 'Forget-Me-Not'] )
state.append ( ['Arizona', 'Phoenix', 7158020, 'Suguaro Catus  
Blossom'] )
state.append ( ['Arkansas', 'Little Rock', 3009730, 'Apple Blossom'] )
state.append ( ['California', 'Sacremento ', 39461600, 'Golden Poppy'] 
)
state.append ( ['Colorado', 'Denver', 5691290, 'Mountain Columbine'] )
state.append ( ['Connecticut', 'Hatford', 3571520, 'Mountain Laurel'] 
)
state.append ( ['Delaware', 'Dover', 965479, 'Peach Blossom'] )
state.append ( ['Florida', 'Tallahassee', 21244300, 'Orange Blossom'] 
)
state.append ( ['Georgia', 'Atlanta', 10511100, 'Cherokee Rose'] )
state.append ( ['Hawaii', 'Honolulu', 1420590, 'Red Hibiscus'] )
state.append ( ['Idaho', 'Boise', 1750540, 'Syringa'] )
state.append ( ['Illinois', 'Springfield', 12723100, 'Violet'] )
state.append ( ['Indiana', 'Indianaplois', 6695500, 'Peony'] )
state.append ( ['Iowa', 'Des Moines', 3148620, 'Wild Rose'] )
state.append ( ['Kansas', 'Topeka', 2911360, 'Sunflower'] )
state.append ( ['Kentucky', 'Frankfort', 4461150, 'Goldenrod'] )
state.append ( ['Louisiana', 'Baton Rouge', 4659690, 'Magnolia'] )
state.append ( ['Maine', 'Augusta', 1339060, 'Pine Cone & Tassel'] )
state.append ( ['Maryland', 'Annapolis', 6035800, 'Black-eyed Susan'] 
)
state.append ( ['Massachusettes', 'Boston', 6882640, 'Mayflower'] )
state.append ( ['Michigan', 'Lansing', 9984070, 'Apple Blossom'] )
state.append ( ['Minniesota', 'St.Paul', 5606250, 'Lady-Slipper'] )
state.append ( ['Mississippi', 'Jackson', 2981020, 'Magnolia'] )
state.append ( ['Missouri', 'Jefferson City', 6121620, 'Hawthorne'] )
state.append ( ['Montana', 'Helena', 1060660, 'Bitterroot'] )
state.append ( ['Nebraska', 'Lincoln', 1925610, 'Goldenrod'] )
state.append ( ['Nevada', 'Carson City', 3027340, 'Sagebrush'] )
state.append ( ['New Hampshire', 'Concord', 1353460, 'Purple Lilac'] )
state.append ( ['New Jersey', 'Trenton', 8886020, 'Violet'] )
state.append ( ['New Mexico', 'Santa Fe', 2092740, 'Yucca'] )
state.append ( ['New York', 'Albany', 19530400, 'Rose'] )
state.append ( ['North Carolina', 'Raleigh', 10381600, 'Flowering    
Dogwood'] )
state.append ( ['North Dakota', 'Bismark', 758080, 'Prairie Rose'] )
state.append ( ['Ohio', 'Columbus', 11676300, 'Scalet Carnation'] )
state.append ( ['Oklahoma', 'Oklahoma City', 3940240, 'Mistletoe'] )
state.append ( ['Oregon', 'Salem', 4181890, 'Oregon Grape'] )
state.append ( ['Pennsylvania', 'Harrisburg', 12800900, 'Mountain   
Laurel'] )
state.append ( ['Rhode Island', 'Providence', 1058290, 'Violet'] )
state.append ( ['South Carolina', 'Columbia', 5084160, 'Yellow 
Jessamine'] )
state.append ( ['South Dakota', 'Pierre', 878698, 'Pasque flower'] )
state.append ( ['Tennessee', 'Nashville', 6771630, 'Iris'] )
state.append ( ['Texas', 'Austin', 28628700, 'Bluebonnet'] )
state.append ( ['Utah', 'Salt Lake City', 3153550, 'Sego Lily'] )
state.append ( ['Vermont', 'Montpelier', 624358, 'Red Clover'] )
state.append ( ['Virginia', 'Richmond', 8501290, 'Dogwood'] )
state.append ( ['Washington', 'Olympia', 7523870, 'Coast 
Rhododendron'] )
state.append ( ['West Virginia', 'Charleston', 1804290, 
'Rhododendron'] )
state.append ( ['Wisconsin', 'Madison', 5807410, 'Wood Violet'] )
state.append ( ['Wyoming', 'Cheyenne', 577601, 'Indian Paintbrush'] )
state.sort()

def showOptions():
print("1. List data and states in order")
print("2. Show a certain state")
print("3. Make a Bar graph with top 5 highest population states")
print("4. Certain state overall population")
print("5. Exit")


while True:
showOptions()
inp = int(input("Choose an option: "))

if inp == 1:
    for state in data:
        for j in state:
            print(j + ":", state[j])
        print()

if inp == 2:
        search = input("Input state you wish to search: ")
        for state in data:
            if state["state"] == search:
                for j in state:
                    print(j + ":", state[j])
                print()
                break

if inp == 3:

            sorted_states = sorted(state, key=lambda i: i[2],    
            reverse=True)
            fig = plt.figure(figsize=(10, 5))

            sorted_states_names = []
            sorted_states_populations = []

            for x in sorted_states[:5]:
                sorted_states_names.append(x["state"])
                sorted_states_populations.append(x["population"])

            # creating the bar plot
            plt.bar(sorted_states_names, sorted_states_populations,
                    width=0.4)
            plt.show()

if inp == 4:
                state_to_be_modified = input(
                    "Input state to update population: ")
                population = int(
                    input("Input the increase amount: "))
                for state in data:
                    if state["state"] == state_to_be_modified:
                        state["population"] += population
                        break

if inp == 5:
                    print("Thanks you for stopping by")
                    exit(0)
else:
                    print("Invalid input. try another")  


` 

您传递的是一个列表,而不是命令。请尝试

sorted_states = sorted(state, key=lambda i: i[2], reverse=True)

请提供预期的(MRE)。我们应该能够复制和粘贴一个连续的代码块,执行该文件,并再现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和期望的输出来测试我们的建议。显示中间结果与您预期的不同之处。我更改了您所说的内容,这起到了作用,现在它给了我以下错误:排序的状态名称。追加(x[“state”])类型错误:列表索引必须是整数或切片,而不是stry您应该看看列表在python中是如何工作的,因为您仍在尝试使用字符串索引列表
sorted_states_names.append(x[0])sorted_states_populations.append(x[3])
您需要传递相应的索引,例如0和3,而不是传递字符串