【问题标题】:convert array to dict将数组转换为字典
【发布时间】:2014-08-28 17:45:34
【问题描述】:

我想将列表转换为字典:

products=[['1','product 1'],['2','product 2']]
arr=[]
vals={}
for product in products:
    vals['id']=product[0]
    vals['name']=product
    arr.append(vals)
print str(arr)

结果是

[{'id': '2', 'name': 'product 2'}, {'id': '2', 'name': 'product 2'}]

但我想要这样的东西:

[{'id': '1', 'name': 'product 1'}, {'id': '2', 'name': 'product 2'}]

【问题讨论】:

  • 这不是更有用的结果{'1': 'product 1', '2': 'product 2'} 吗?

标签: python arrays dictionary


【解决方案1】:

您需要做的是为循环的每次迭代创建一个新字典。

products=[['1','product 1'],['2','product 2']]
arr=[]
for product in products:
    vals = {}
    vals['id']=product[0]
    vals['name']=product[1]
    arr.append(vals)
print str(arr)

当您将append 像字典这样的对象添加到数组时,Python 在追加之前不会进行复制。它将那个确切的对象附加到数组中。所以如果你将dict1添加到一个数组中,然后更改dict1,那么数组的内容也会发生变化。因此,您应该每次都制作一本新字典,如上所述。

【讨论】:

    【解决方案2】:

    为简单起见,您也可以将其制成一个衬里:

    products=[['1','product 1'],['2','product 2']]
    arr= [{"id":item[0], "name":item[1]} for item in products]
    

    产量:

    [{'id': '1', 'name': 'product 1'}, {'id': '2', 'name': 'product 2'}]
    

    【讨论】:

      【解决方案3】:
      products=[['1','product 1'],['2','product 2']]
      arr=[{'id':a[0], 'name': a[1]} for a in products]
      
      print str(arr)
      

      也可以

      【讨论】:

        【解决方案4】:
        products=[['1','product 1'],['2','product 2']]
        arr=[]
        for product in products:
            vals = {}
            for i, n in enumerate(['id', 'name', ....]): # to make it more dynamic?
              vals[n]=product[i]
            arr.append(vals)
        

        或者只使用 [0], [1] 就像上一篇文章中所说的那样

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-21
          • 2021-08-10
          • 2010-09-16
          • 2018-05-28
          • 2019-05-29
          • 2018-11-22
          • 2020-09-16
          • 1970-01-01
          相关资源
          最近更新 更多