我想问一下这里出了啥问题,怎么改正,正确代码怎么编啊?

tables={'中国':{'人口数':14.26,'GDP':14.73},
        '印度':{'人口数':13.44,'GDP':2.709},
        '日本':{'人口数':1.26,'GDP':5.049},
        '美国':{'人口数':3.29,'GDP':20.933},
        '英国':{'人口数':0.66,'GDP':2.711},
        '德国':{'人口数':0.83,'GDP':3.803}}
ls1=[]
for k,v in tables.items():
    ls1.append(v)
number=[item[0] for item in ls1]
GDP=[item[1] for item in ls1]
ave=[]
for i,n in ls2(number,GDP):
    ave.append(i/n)
ls3.append(k,avg)
ls3.sort(key=lambda x: x[1],reverse=True)
for c,v in ls3:
    print("{}的人均GDP:{:.2f}").format(c,v)

主要错误有把字典当作列表直接用索引去引用了,没有将国名与人均GDP构成一个字典,这样改一下就可以了:

tables = {'中国': {'人口数': 14.26, 'GDP': 14.73},
          '印度': {'人口数': 13.44, 'GDP': 2.709},
          '日本': {'人口数': 1.26, 'GDP': 5.049},
          '美国': {'人口数': 3.29, 'GDP': 20.933},
          '英国': {'人口数': 0.66, 'GDP': 2.711},
          '德国': {'人口数': 0.83, 'GDP': 3.803}}
ls1 = []
for k, v in tables.items():
    ls1.append(v)
number = [item['人口数'] for item in ls1]
GDP = [item['GDP'] for item in ls1]
ave = []
for i, n in zip(number, GDP):
    ave.append(n/i)
dic=dict(zip(tables.keys(),ave))
ls2=sorted(dic.items(),key=lambda x: x[1], reverse=True)
for c,v in ls2: 
    print("{}的人均GDP:{:.2f}".format(c, v))

 

如果对你有帮助,请点击一下我回答的右上方采纳按钮。