如何创建以列表作为值的词典?

2024-06-02 07:16:30 发布

您现在位置:Python中文网/ 问答频道 /正文

如何获得此输出:

{'Test 1': ['100', '88', '45', '59', '73', '89'], 'Test 2': ['90', '99', '56', '61', '79', '97'], 'Test 3': ['80', '111', '67', '67', '83', '101']}

用这些数据

grades =  [
  ['Students', 'Test 1', 'Test 2', 'Test 3'],
  ['Tomas', '100', '90', '80'],
  ['Marcos', '88', '99', '111'],
  ['Flavia', '45', '56', '67'],
  ['Ramon', '59', '61', '67'],
  ['Ursula', '73', '79', '83'],
  ['Federico', '89', '97', '101']
] 

Tags: 数据testgradesmarcosstudentstomasfedericoramon
2条回答
dictt ={}
for n,i in enumerate(grades[0][1:],start=1):
  dictt[i] = [x[n] for x in grades[1:]]

print(dictt)

>>> {'Test 1': ['100', '88', '45', '59', '73', '89'], 'Test 2': ['90', '99', '56', '61', '79', '97'], 'Test 3': ['80', '111', '67', '67', '83', '101']}

start = 1忽略将标签添加到字典值

grades的第一个元素(行)包含要使用的所有键。每隔一行包含每列中键的值。您可以使用zip和如下解包:zip(grades[0], *grades[1:])获得一个迭代器,该迭代器给出一个元组,其中包含键作为第一个元素,以及剩余元素中每隔一行的对应列。然后,您可以使用k, *v in zip(...)来解压它,以获取k中的键,以及v列中的值列表

然后,您可以使用字典理解来根据zip操作的结果创建字典k:v是字典的键和值,对于k in grades[0],因此每次迭代将从grades[0]中给k一个元素,然后*v是一个完整的垂直列

{k: v for k, *v in zip(grades[0], *grades[1:])}

# Result:
{'Students': ['Tomas', 'Marcos', 'Flavia', 'Ramon', 'Ursula', 'Federico'],
 'Test 1': ['100', '88', '45', '59', '73', '89'],
 'Test 2': ['90', '99', '56', '61', '79', '97'],
 'Test 3': ['80', '111', '67', '67', '83', '101']}

相关问题 更多 >