所以我到處尋找,似乎無法得到我理解的答案。我正在嘗試實作一段代碼,其中 Python 查看文本檔案,獲取一行,并查找具有相應名稱的字典。到目前為止,這是我的代碼:
f = open("data.txt", "r")
content = f.readlines()
icecream = {
"fat": 80,
"carbohydrates": 50,
"protein": 650,
"calories": 45,
"cholesterol": 50,
"sodium": 50,
"name": "Icecream"
}
bigmac = {
"fat": 29,
"carbohydrates": 45,
"protein": 25,
"sodium": 1040,
"cholesterol": 75,
"calories": 540,
"name": "Big Mac"
}
whopper = {
"fat": 47,
"carbohydrates": 53,
"protein": 33,
"sodium": 1410,
"cholesterol": 100,
"calories": 760,
"name": "Whopper"
}
menu = [
bigmac,
whopper,
icecream
]
sea = content[0]
for line in enumerate(menu):
if sea.lower() in line['name'].lower():
print (line['name'])
我不斷收到錯誤TypeError: tuple indices must be integers or slices, not str我不明白為什么。有人可以幫我修復我的代碼,并可能讓我的 2 個腦細胞了解為什么會出現這個錯誤嗎?
uj5u.com熱心網友回復:
將您的代碼更新為:
for line in menu:
if sea.lower() in line['name'].lower():
print (line['name'])
“列舉”對已經是陣列的選單沒用
uj5u.com熱心網友回復:
line['name']呼叫時會出現錯誤,呼叫line生成的元組也是如此enumerate:
(0, {'fat': 29, 'carbohydrates': 45, 'protein': 25, 'sodium': 1040, 'cholesterol': 75, 'calories': 540, 'name': 'Big Mac'})
(1, {'fat': 47, 'carbohydrates': 53, 'protein': 33, 'sodium': 1410, 'cholesterol': 100, 'calories': 760, 'name': 'Whopper'})
(2, {'fat': 80, 'carbohydrates': 50, 'protein': 650, 'calories': 45, 'cholesterol': 50, 'sodium': 50, 'name': 'Icecream'})
因此,它需要一個整數才能知道menu要呼叫哪些專案。
uj5u.com熱心網友回復:
enumerate()回傳索引和元素的元組。例如:
>>> for item in enumerate(["a", "b", "c"]):
>>> print(item)
(0, "a")
(0, "b")
(0, "c")
因此,當您列舉menu串列時,您的專案不是這個字典,而是索引和字典的元組。如果您不需要元素索引,請使用:
for line in menu:
if sea.lower() in line['name'].lower():
print (line['name'])
如果您需要索引,請使用:
for i, line in enumerate(menu):
if sea.lower() in line['name'].lower():
print (i, line['name'])
uj5u.com熱心網友回復:
enumerate(menu) 回傳一個“元組”,而您作為字典訪問它的方式導致了此錯誤。此外,如果讀取的字串中有任何換行符,請使用分割線來處理。
因此,在不列舉的情況下更改代碼如下。
sea = content.splitlines()[0]
for line in menu:
if sea.lower() in line['name'].lower():
print (line['name'])
這取決于輸入檔案資料的方式。如果這不起作用,請與我們分享輸入檔案的外觀。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/434457.html
