我列出了名称和分数,例如:
[['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识别为最大项目。我已经尝试了这么久但我一直在尝试不同类型的错误。我四处搜索,似乎每个人都在告诉我使用地图或列表理解,但这些似乎都不起作用。
答案 0 :(得分:2)
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:]))
与[int(i) for i in sublist[1:]]
相同。
答案 1 :(得分:0)
解决方案是:
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]
答案 2 :(得分:0)
由于看起来每个function callPage(stPageLink, stPageParams) {
$("#PageContent").load(stPageLink + $.param(stPageParams))
}
$(document).ajaxSuccess(function(event, jqxhr, options, data) {
var data = options.url.split("?")[1].split("=");
var res = {};
res[data[0]] = data[1];
$("#txt1").val(res[data[0]]);
})
$("button").click(function() {
var ipUserId = "abc";
callPage(document.getElementById("subPage1").href + "/?", {
user: ipUserId
})
})
的第一个元素是一个名称而其他元素可能是测试分数,因此您应该使用一个字典,其中包含该人名的密钥和{{1}的值分数:
list
然后,您可以更轻松地处理数据:
list
答案 3 :(得分:-1)
您拥有的是一系列记录。那是你的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)))
但也许这是一个不必要的exta步骤。你提到的第二件事是想要将最高分与每个名字联系起来。因此,您可以只提取所需的信息,而不是生成每条记录的完整转换。
def name_best(lst):
name = lst[0]
grades = map(int, lst[1:])
best = max(grades)
return (name, best)
print(list(map(name_best, data)))