【问题标题】:How to convert list of lists to dict key value pairs python如何将列表列表转换为dict键值对python
【发布时间】:2021-10-10 19:44:31
【问题描述】:

我有一个这样的列表:

splitted = [['OID:XXXXXXXXXXX1',
  ' street:THE ROAD',
  'town:NEVERPOOL',
  'postcode:M1 2DD',
  'Name:SOMEHWERE',
  'street:THE ROAD',
  'town:NEVERLAND',
  'postcode:M1 2DD'],
 ['OID:XXXXXXXXXXX2',
  ' Name:30',
  'street:DA PLACE',
  'town:PERTH',
  'postcode:PH1 2DD',
  'Name:30',
  'street:DA PLACE',
  'town:PERTH',
  'postcode:PH1 2DD']]

我想将这些转换为键值对,如下所示:

{'OID': 'XXXXXXXXXXX1', ' street': 'THE ROAD', 'town': 'NEVERPOOL', 'postcode': 'M1 2DD', 'Name': 'SOMEWHERE', 'street': 'THE ROAD', 'town': 'NEVERPOOL', 'postcode': 'M1 2DD'}, {'MPXN': 'XXXXXXXXXXX2', ' Name': '30', 'street': 'DA PLACE', 'town': 'PERTH', 'postcode': 'PH1 2DD', 'primaryName': '30', 'street1': 'DA PLACE', 'town': 'PERTH', 'postcode': 'PH1 2DD'} 

我无法在线找到一种方法将列表列表转换为键值对作为字典,然后供熊猫使用。这样做的目的是将 dicts 转换为 pandas DataFrame,这样我就可以使用它并以表格格式使用它

到目前为止我使用的代码在这里:

output = []
for list in splitted:
    for key_value in list:
        key, value = key_value.split(':', 1)
        if not output or key in output[0]:
            output.append({})
        output[-1][key] = value

上面代码的问题是它不维护列表列表,并且将OID字段与其他数据项混合在一起,我想要一个从每个OID开始的dict。

任何帮助将不胜感激:)

【问题讨论】:

    标签: python list dictionary key-value


    【解决方案1】:

    问题是你在output 中追加一个新的字典每次output 的第一个元素有你正在寻找的key。这会导致您的代码失败,因为在处理了第一个 list in splitted 之后,output 的第一个元素看起来像这样:

    {'OID': 'XXXXXXXXXXX1',
      ' street': 'THE ROAD',
      'town': 'NEVERPOOL',
      'postcode': 'M1 2DD',
      'Name': 'SOMEHWERE',
      'street': 'THE ROAD'}
    

    并且您今后将看到的所有key 值都已存在于所述元素中。

    你真正想做的是每次遇到新的list in splitted添加一个新的字典

    output = []
    for l in splitted:
        output.append(dict())
        for key_value in l:
            key, value = key_value.split(':', 1)
            output[-1][key] = value
    

    现在你得到了你所期望的:

    [{'OID': 'XXXXXXXXXXX1',
      ' street': 'THE ROAD',
      'town': 'NEVERLAND',
      'postcode': 'M1 2DD',
      'Name': 'SOMEHWERE',
      'street': 'THE ROAD'},
     {'OID': 'XXXXXXXXXXX2',
      ' Name': '30',
      'street': 'DA PLACE',
      'town': 'PERTH',
      'postcode': 'PH1 2DD',
      'Name': '30'}]
    

    当我引起你的注意时:

    • dicts 是 python 中的无序数据类型(或按插入顺序排序),因此“将 OID 字段与其他数据项混合”并不是真正的事情。你想用所有这些键创建一个单个字典,但你最终创建了一堆字典,每个字典都有一个键(在第一个键之后)
    • list 是 python 中的内置类,因此创建一个名为 list 的变量会隐藏这个类。您不应该这样做,因为以后如果您想使用 list 类,您可能会遇到错误。
    • 调试是程序员必须具备的一项重要技能。我鼓励你看看这些链接:How to debug small programs. | What is a debugger and how can it help me diagnose problems?您可以使用调试器来单步调试您的代码,并观察每条语句如何影响程序的状态,这有助于您找出问题所在。

    【讨论】:

    • 谢谢,这非常有帮助,感谢您的反馈。注意到
    【解决方案2】:

    您也可以尝试使用字典理解:

    [{x.split(":")[0]:x.split(":")[1] for x in splitted[0]},
     {x.split(":")[0]:x.split(":")[1] for x in splitted[1]}] 
    

    输出是:

    [{'OID': 'XXXXXXXXXXX1', ' street': 'THE ROAD', 'town': 'NEVERLAND', 'postcode': 'M1 2DD', 'Name': 'SOMEHWERE', 'street': 'THE ROAD'}, {'OID': 'XXXXXXXXXXX2', ' Name': '30', 'street': 'DA PLACE', 'town': 'PERTH', 'postcode': 'PH1 2DD', 'Name': '30'}]
    

    【讨论】:

      猜你喜欢
      • 2021-04-18
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      相关资源
      最近更新 更多