【问题标题】:Python - Creating dictionary from numpy table to display listsPython - 从 numpy 表创建字典以显示列表
【发布时间】:2019-01-21 21:18:38
【问题描述】:

给定以下 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'],
    ['PersonF', '89', '97', '101']
     ]

我需要创建一个名为 GL 的字典,将学生的姓名映射到他们的考试成绩列表。成绩应该从 str 转换为 int。

Desired Output: {'PersonA':[100, 90, 80], 'PersonB':[88, 99, 111], ect....}

【问题讨论】:

  • 题外话,但你缺少一个右括号来匹配GR = [
  • 请添加所需的输出。

标签: python numpy dictionary


【解决方案1】:

我在理解上有一点困难,但我认为这就是您要寻找的:

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]}]

【讨论】:

  • like this 带 ```,称为“反引号”,在大多数西方棋盘上是 shift+tilde
  • 这就是我能够返回所询问的内容的方式,我花了一点时间进行调试,但应该可以工作:GL = dict() for item in GR[1:]: GL[item[0]] = [int(item[1]),int(item[2]),int(item[3])] print(GL)
  • @Mac 如果您回答了自己的问题(或者如果您在这里找到了答案),您应该将其标记为已回答。 (您可以发布自己问题的答案并将其标记为答案,这是允许的)
【解决方案2】:

Python 3 的替代解决方案使用map 将成绩从strs 转换为ints 并部分解包以将每个列表拆分为person 及其grades

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]}

Python 2 等效

{g[0]: map(int, g[1:]) for g in GR[1:]}

【讨论】:

    【解决方案3】:

    选项 1:

    GR_ = {i[0]: list(map(int, i[1:])) for i in GR[1:]}
    

    选项 2:

    GR_ = dict(map(lambda x: (x[0], list(map(int, x[1:]))), 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]}
    

    【讨论】:

      【解决方案4】:

      您的 GR 是一个 numpy 数组(并且使用 a[2,0] 索引证实了这一点):

      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]}
      

      【讨论】:

        【解决方案5】:

        我很抱歉@Charles Landau,自从问了这个问题后,我的 Python 技能有了很大的提高。

        GL = dict() 
             for i in GR[1:]:
                  GL[i[0]] = [int(i[1]),int(i[2]),int(i[3])]
             print(GL)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-11-17
          • 2018-04-27
          • 1970-01-01
          • 2013-10-26
          • 2017-05-05
          • 1970-01-01
          • 2023-02-07
          相关资源
          最近更新 更多