[英]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
如果你想以這種方式遍歷一個列表,你需要將range
與len
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.