Python 如何创建以列表作为值的词典?
如何获得此输出:Python 如何创建以列表作为值的词典?,python,python-3.x,list,dictionary,Python,Python 3.x,List,Dictionary,如何获得此输出: {'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
{'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']
]
grades
的第一个元素(行)包含所有要使用的键。每隔一行包含每列中键的值。您可以使用zip
进行如下解包:zip(grades[0],*grades[1:])
来获取迭代器,该迭代器给出一个元组,其中包含键作为第一个元素,以及剩余元素中每隔一行的对应列。然后,您可以使用k、*v-in-zip(…)
将其解压缩,以获取k
中的键,以及v
中列中的值列表
然后,您可以使用字典理解来根据
zip
操作的结果创建字典k:v
是字典的键和值,对于等级[0]中的k,因此每次迭代将从等级[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']}
start=1
省略了将标签添加到字典值中的操作它实际上还有一行……嗨,你能解释一下这里发生了什么吗?k:v
是字典的键和值,因为k在等级[0]
中,所以每次迭代都会从grades[0]
中给出一个元素,然后,*v
是一个完整的垂直列。@norok2实际上,dico.pop(“学生”,无)
我的错。@PranavHosangadi donePandas可能是一个你想查看的库欢迎使用堆栈溢出!即使您已收到问题的答案,请阅读,并提供答案。“为我实现此功能”是本网站的主题。你必须做出诚实的尝试,然后问一个关于你的算法或技术的具体问题。
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']}