[英]How to convert part of a list into integers in Python?
我有包含名稱和分數的列表,例如:
[['AMY', '2', '9', '10'], ['ANNA', '10', '4', '7'], ['BOB', '6', '7', '10']]
我希望它以這樣的方式結束:
[['AMY', 2, 9, 10], ['ANNA', 10, 4, 7], ['BOB', 6, 7, 10]]
我需要將數字轉換為整數,因為它們在嘗試使用 max() 函數時給我帶來了問題,因為它無法將 10 識別為最大的項目。 我已經嘗試了很長時間,但我不斷收到不同類型的錯誤。 我四處搜索,似乎每個人都在告訴我使用地圖或列表理解,但這些似乎都不起作用。
data = [['AMY', '2', '9', '10'], ['ANNA', '10', '4', '7'], ['BOB', '6', '7', '10']]
dict_data = {sublist[0]: list(map(int, sublist[1:])) for sublist in data}
現在您可以使用每個人的姓名訪問他們的號碼,例如:
>>> print(dict_data['AMY'])
[2, 9, 10]
>>> print(max(dict_data['AMY']))
10
對於字典創建,您使用子列表中的第一個元素作為鍵,然后使用map()
將其余元素轉換為整數。 正如您可能在其他問題list(map(int, sublist[1:]))
讀到的那樣list(map(int, sublist[1:]))
與[int(i) for i in sublist[1:]]
。
解決辦法是:
data = [['AMY', '2', '9', '10'], ['ANNA', '10', '4', '7'], ['BOB', '6', '7', '10']]
print [[a if not a.isdigit() else int(a) for a in element] for element in data]
由於看起來每個list
的第一個元素是姓名,而其他元素可能是考試成績,因此您應該使用帶有人名鍵和分數list
值的字典:
l = [['AMY', '2', '9', '10'], ['ANNA', '10', '4', '7'], ['BOB', '6', '7', '10']]
dct = {x[0]:[int(el) for el in x[1:]] for x in l}
然后,您可以更輕松地處理數據:
>>> for name in dct:
... print(name, max(dct[name]))
...
('AMY', 10)
('BOB', 10)
('ANNA', 10)
您擁有的是一組記錄。 那是你的data
。
data = [
['AMY', '2', '9', '10'],
['ANNA', '10', '4', '7'],
['BOB', '6', '7', '10']
]
您的第一個問題是如何轉換每條記錄。 正確的方法是定義一個轉換並將其映射到您的記錄列表中。 例如,您可以像這樣執行您要求的第一件事:
def transform_record(lst):
name = lst[0]
grades = list(map(int, lst[1:]))
grades.insert(0, name)
return grades
print(list(map(transform_record, data)))
但也許這是一個不必要的額外步驟。 您提到的第二件事是希望將最高分數與每個名稱相關聯。 因此,您可以只提取您想要的信息,而不是對每條記錄進行完整的轉換。
def name_best(lst):
name = lst[0]
grades = map(int, lst[1:])
best = max(grades)
return (name, best)
print(list(map(name_best, data)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.