簡體   English   中英

新編碼器:TypeError:列表索引必須是整數或切片,而不是元組

[英]New coder: TypeError: list indices must be integers or slices, not tuple

我正在編寫一些代碼來從文件中打印高分。 我是 python 的新手,因此沒有太多經驗。 很高興被告知我哪里出錯以及如何解決它:)

請注意代碼可能沒有效率!!!

搜索問題並向朋友尋求建議,來自沒有先前編碼知識的背景,我周圍沒有人知道如何提供幫助!

file = open("scores.txt", "r")
for line in file:
    filecont = line.split(",")
listOfInt = filecont[::2]
listOfStr = filecont[1::2]
intoDict = zip(listOfStr, listOfInt)
dictOfWords = dict(intoDict)
sortedbyValueDict = sorted(dictOfWords.items(), key = lambda t:t[1]) 
print("\n<<< HIGH SCORES >>>\n")
counter = 0
for i in sortedbyValueDict:
    print(i, ':', sortedbyValueDict[i])
    counter = counter + 1
    if counter == 5:
        break

Scores.txt 如下:

7,jacob,5,rishikesh,3,alex,2,oliver,9,piers

我希望 output 按順序排列前 5 個高分,但是我收到錯誤消息:

TypeError:列表索引必須是整數或切片,而不是元組

感謝任何幫助的人!

嘗試這個

import sys

file = open("input.txt", "r")

for line in file:
    filecont = line.split(",")
listOfInt = filecont[::2]
listOfStr = filecont[1::2]
intoDict = zip(listOfStr, listOfInt)
dictOfWords = dict(intoDict)

print(dictOfWords)

sortedbyValueDict = sorted(dictOfWords.items(), key = lambda t:t[1], reverse=True)
print("\n<<< HIGH SCORES >>>\n")
counter = 0
for i in sortedbyValueDict:
    print(counter, ':', i)
    counter = counter + 1
    if counter == 5:
        break

這會給你結果:

<<< HIGH SCORES >>>

0 : ('piers', '9')
1 : ('jacob', '7')
2 : ('rishikesh', '5')
3 : ('alex', '3')
4 : ('oliver', '2')

如果您希望它按升序排列,您可以刪除reverse=True

您混淆了兩種不同類型的迭代。

當您運行以下命令時:

l = ['A', 'B', 'C']
for i in l:
    print(i)

output 將是:

A
B
C

如果您想像大多數其他語言一樣將 i 視為 integer,則需要使用range function:

for i in range(3):
    print(i)

output:

0
1
2

如果你想以這種方式遍歷一個列表,你需要將rangelen function 結合起來,它會返回一個列表的長度:

for i in range(len(l)):
    print(l[i])

output:

A
B
C

在您的情況下,以下內容將解決您的錯誤:

for i in sortedbyValueDict:
    print(i)
    counter = counter + 1
    if counter == 5:
        break

或者:

for i in range(len(sortedbyValueDict)):
    print(i, ':', sortedbyValueDict[i])
    counter = counter + 1
    if counter == 5:
        break

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM