【问题标题】:Python List to List of DictionariesPython列表到字典列表
【发布时间】:2013-10-04 15:14:22
【问题描述】:

我有关注列表

lines = 
    [['client', 'name', 'phone', 'address', 'email'],

     ['client2', 'name2', 'phone2', 'address2', 'email2'],

     ['client3', 'name3', 'phone3', 'address3', 'email3']]

我想知道是否可以将列表转换为 dic 列表。

喜欢:

lines = 
    [{Client: client, Name:name, Phone:phone, Address:address, Email:email},

     {Client: client2, Name:name2, Phone:phone2, Address:address2, Email:email2},

     {Client: client3, Name:name3, Phone:phone3, Address:address3, Email:email3}]

【问题讨论】:

  • 您想要的输出不是有效的字典,因为单个键有多个值。例如,Client 可以是 clientclient2
  • 字典列表怎么样?
  • 我知道了,所以我可以说一个字典列表吗?
  • 换行符不会破坏列表!
  • 输入都不是有效列表(缺少逗号...)

标签: python dictionary logic


【解决方案1】:

提供“行”是一个列表,你可以把它变成一个字典列表,像这样:

clientList = []
for line in lines:
    clientList.append({'Client':line[0],
                       'Name':line[1], 
                       'Phone':line[2], 
                       'Address':line[3], 
                       'Email':line[4]})

【讨论】:

    【解决方案2】:

    根据您的 cmets,这就是我认为您想要的。首先,您需要一个列表,列出应该调用的所有键:

    >>> keys = ["Client", "Name", "Phone", "Address", "Email"]
    

    然后,很容易从包含与键一样多的项目的列表转到字典:

    >>> info_list = ["Client #1", "Joe", "800-213-4445", "123 Fake St.", "fake@fake.com"]
    >>> dict(zip(keys, info_list))
    {'Email': 'fake@fake.com', 'Phone': '800-213-4445', 'Client': 'Client #1', 'Name': 'Joe', 'Address': '123 Fake St.'}
    

    现在,如果您有 36 个项目,您只需要一个包含 36 个键的列表。

    【讨论】:

    • 问题是,我有太多的值要像第一个例子一样,如果我尝试,我会收到以下错误:“ValueError: too many values to unpack”
    • @Luiz.brsp:你是怎么称呼它的?这意味着你试图给它 6 或 7 个元素而不是 5
    • 实际上是一个列表列表,每个列表有 36 个“项目”。 (感谢您的关注!)
    • @Luiz.brsp:好的,在问题中,您有一个包含 3 个列表的列表,每个内部列表有 5 个项目。你到底有什么?
    • 在我的实际情况中,我有一个千列表,每个内部列表有36个项目。
    【解决方案3】:

    开始:

    lines = [client, name, phone, address, email,
             client2, name2, phone2, address2, email2,
             client3, name3, phone3, address3, email3]
    
    linesD = {entry: entry for entry in lines}
    

    【讨论】:

      【解决方案4】:

      你不能用它们来制作一本字典,但你可以制作一个字典列表——我会这样做:

      lines = [
          client, name, phone, address, email,
          client2, name2, phone2, address2, email2,
          client3, name3, phone3, address3, email3,
      ]
      
      keys = ('Client', 'Name', 'Phone', 'Address', 'Email')
      
      clients = [dict(zip(keys, lines[i:i+5])) for i in xrange(0, len(lines), 5)]
      

      【讨论】:

        【解决方案5】:

        因为你的数据不是很好的格式,我稍微改变一下......

        import pandas as pd
        ...
        lines = [
            [client, name, phone, address, email],
            [client2, name2, phone2, address2, email2],
            [client3, name3, phone3, address3, email3]]
        fields=["Client", "Name", "Phone", "Address", "Email"]
        s = pd.DataFrame(lines, columns=fields)
        # choose one u want:
        print(list(s.T.to_dict().values())
        print(s.to_dict(outtype='list'))
        print(s.T.to_dict())
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多