Python-从numpy表创建字典以显示列表
给定以下numpy表Python-从numpy表创建字典以显示列表,python,numpy,dictionary,Python,Numpy,Dictionary,给定以下numpy表 GR = [ ['Student', 'Exam 1', 'Exam 2', 'Exam 3'], ['PersonA', '100', '90', '80'], ['PersonB', '88', '99', '111'], ['PersonC', '45', '56', '67'], ['PersonD', '59', '61', '67'], ['PersonE', '73', '79', '83'], ['Pe
GR = [
['Student', 'Exam 1', 'Exam 2', 'Exam 3'],
['PersonA', '100', '90', '80'],
['PersonB', '88', '99', '111'],
['PersonC', '45', '56', '67'],
['PersonD', '59', '61', '67'],
['PersonE', '73', '79', '83'],
['PersonF', '89', '97', '101']
]
我需要创建一个名为GL的字典,将学生的名字映射到他们考试成绩的列表。等级应从str转换为int
Desired Output: {'PersonA':[100, 90, 80], 'PersonB':[88, 99, 111], ect....}
我在理解上有点困难,但我想这就是你想要的:
GL = [
{x[0]: [int(j) for j in x[1:]]} for x in GR[1:]
]
输出:
[{'PersonA': [100, 90, 80]},
{'PersonB': [88, 99, 111]},
{'PersonC': [45, 56, 67]},
{'PersonD': [59, 61, 67]},
{'PersonE': [73, 79, 83]},
{'PersonF': [89, 97, 101]}]
Python3的另一种解决方案是使用
map
将等级从str
s转换为int
s,并使用部分解包将每个列表拆分为person
及其等级
In [111]: {person: list(map(int, grades)) for person, *grades in GR[1:]}
Out[111]:
{'PersonA': [100, 90, 80],
'PersonB': [88, 99, 111],
'PersonC': [45, 56, 67],
'PersonD': [59, 61, 67],
'PersonE': [73, 79, 83],
'PersonF': [89, 97, 101]}
Python2等价物
{g[0]: map(int, g[1:]) for g in GR[1:]}
备选案文1:
备选案文2:
输出:
您的
GR
是一个numpy数组(使用a[2,0]
索引确认了这一点):
以及下列名单:
In [187]: {row[0]: row[1:].astype(int).tolist() for row in GR[1:]}
Out[187]:
{'PersonA': [100, 90, 80],
'PersonB': [88, 99, 111],
'PersonC': [45, 56, 67],
'PersonD': [59, 61, 67],
'PersonE': [73, 79, 83],
'PersonF': [89, 97, 101]}
我的名单转换提名如下:
In [188]: {name: [int(i) for i in grades] for name, *grades in GR[1:]}
Out[188]:
{'PersonA': [100, 90, 80],
'PersonB': [88, 99, 111],
'PersonC': [45, 56, 67],
'PersonD': [59, 61, 67],
'PersonE': [73, 79, 83],
'PersonF': [89, 97, 101]}
我的道歉@Charles Landau,我的python技能在提出这个问题后有了很大的提高
GL = dict()
for i in GR[1:]:
GL[i[0]] = [int(i[1]),int(i[2]),int(i[3])]
print(GL)
除此之外,您缺少一个与
GR=[
匹配的结束括号。请添加所需的输出。像这样
加上“``”,称为“backtick”,在大多数西方板上它是shift+tilde。这是我如何返回所请求的内容的,我花了一点时间进行调试,但应该可以工作:GL=dict(),用于GR[1:]:GL[item[0]=[int(item[1])、int(item[2])、int(item[3])]print(GL)
@Mac如果您回答了自己的问题(或者在这里找到了答案),您应该将其标记为已回答。(您可以发布自己问题的答案并将其标记为答案,这是允许的)
In [179]: GR
Out[179]:
array([['Student', 'Exam 1', 'Exam 2', 'Exam 3'],
['PersonA', '100', '90', '80'],
['PersonB', '88', '99', '111'],
['PersonC', '45', '56', '67'],
['PersonD', '59', '61', '67'],
['PersonE', '73', '79', '83'],
['PersonF', '89', '97', '101']], dtype='<U7')
In [185]: {row[0]: row[1:] for row in GR[1:]}
Out[185]:
{'PersonA': array(['100', '90', '80'], dtype='<U7'),
'PersonB': array(['88', '99', '111'], dtype='<U7'),
'PersonC': array(['45', '56', '67'], dtype='<U7'),
'PersonD': array(['59', '61', '67'], dtype='<U7'),
'PersonE': array(['73', '79', '83'], dtype='<U7'),
'PersonF': array(['89', '97', '101'], dtype='<U7')}
In [186]: {row[0]: row[1:].astype(int) for row in GR[1:]}
Out[186]:
{'PersonA': array([100, 90, 80]),
'PersonB': array([ 88, 99, 111]),
'PersonC': array([45, 56, 67]),
'PersonD': array([59, 61, 67]),
'PersonE': array([73, 79, 83]),
'PersonF': array([ 89, 97, 101])}
In [187]: {row[0]: row[1:].astype(int).tolist() for row in GR[1:]}
Out[187]:
{'PersonA': [100, 90, 80],
'PersonB': [88, 99, 111],
'PersonC': [45, 56, 67],
'PersonD': [59, 61, 67],
'PersonE': [73, 79, 83],
'PersonF': [89, 97, 101]}
In [188]: {name: [int(i) for i in grades] for name, *grades in GR[1:]}
Out[188]:
{'PersonA': [100, 90, 80],
'PersonB': [88, 99, 111],
'PersonC': [45, 56, 67],
'PersonD': [59, 61, 67],
'PersonE': [73, 79, 83],
'PersonF': [89, 97, 101]}
GL = dict()
for i in GR[1:]:
GL[i[0]] = [int(i[1]),int(i[2]),int(i[3])]
print(GL)