【问题标题】:Python: How to convert a dictionary of lists to a JSON object?Python:如何将列表字典转换为 JSON 对象?
【发布时间】:2017-11-18 15:43:00
【问题描述】:

我是“json”库的新手,无法将列表字典转换为 JSON 对象,以下是我得到的字典:

import json

data = {

     'title' : ['Seven days', 'Not Today', 'Bad Moms'],
     'date'  : ['July 17', 'Aug 18', 'Jan 19']

}

json_data = json.dumps(data)

print(json_data)

这是我得到的结果:

{"title" : ['Seven days', 'Not Today', 'Bad Moms'], "date" : ['July 17', 'Aug 18', 'Jan 19']}

如何以这种方式构建它:

{"title" : "Seven days","date" : "July 17"}, {"title" : "Not Today","date" : "Aug 18"}, {"title" : "Bad Mom","date" : "Jan 19"}

谢谢。

【问题讨论】:

  • 您想要的输出不是有效的 json,这些是多个逗号分隔的 json 对象
  • 这与 json 无关......您只是在问如何将您的 dict 列表转换为 dicts 列表。 (假设您想要一个列表,而不是无效的 JSON。)
  • 你熟悉json模块吗?
  • @Bryan Oakley 对不起,我对 json 模块不是很熟悉,但这是我参考过的:stackoverflow.com/questions/29819114/…

标签: python json list dictionary


【解决方案1】:

你可以像这样转换你的数据:

d = [{'title': t, 'date': d} for t, d in zip(data['title'], data['date'])]
#[{'title': 'Seven days', 'date': 'July 17'}, 
# {'title': 'Not Today', 'date': 'Aug 18'}, 
# {'title': 'Bad Moms', 'date': 'Jan 19'}]

将其转储到 json 将产生一些字符串,例如:

'[{"title": "Seven days", "date": "July 17"}, {"title": "Not Today", "date": "Aug 18"}, {"title": "Bad Moms", "date": "Jan 19"}]'

如果您希望您的 json 对每个对象中的键有保证的顺序,您可以使用:

from collections import OrderedDict
d = [OrderedDict([('title', t), ('date', d)]) for t, d in zip(data['title'], data['date'])]

【讨论】:

    【解决方案2】:

    先重组data

    import json
    data = {
    
     'title' : ['Seven days', 'Not Today', 'Bad Moms'],
     'date'  : ['July 17', 'Aug 18', 'Jan 19']
    
    }
    new_data = [{"title":i, "date":b} for i, b in zip(data["title"], data["date"])]
    final_data = json.dumps(new_data)
    

    输出:

    '[{"date": "July 17", "title": "Seven days"}, {"date": "Aug 18", "title": "Not Today"}, {"date": "Jan 19", "title": "Bad Moms"}]'
    

    更强大的解决方案:

    new_data = [dict(zip(data.keys(), i)) for i in zip(*data.values())]
    

    请注意,上面的解决方案最好在 Python2 中使用,其中 .keys().values() 是有序的。

    【讨论】:

      【解决方案3】:

      如果你想做长版本,你可以这样做,你只需先将两个数据字段放在两个列表中。

      import json
      
      data = {
      
           'title' : ['Seven days', 'Not Today', 'Bad Moms'],
           'date'  : ['July 17', 'Aug 18', 'Jan 19']
      
      }
      
      titles = data['title']
      dates = data['date']
      
      lst = list()
      
      for i in range(len(titles)):
          a = dict()
          a["title"] = titles[i]
          a["date"] = dates[i]
          lst.append(a)
      
      print json.dumps(lst)
      

      输出将如下所示:

      [{"date": "July 17", "title": "Seven days"}, {"date": "Aug 18", "title": "Not Today"}, {"date": "Jan 19", "title": "Bad Moms"}]
      

      【讨论】:

        猜你喜欢
        • 2012-07-03
        • 1970-01-01
        • 2014-02-26
        • 1970-01-01
        • 2020-08-21
        • 1970-01-01
        • 2019-04-02
        • 2019-02-01
        • 2021-06-28
        相关资源
        最近更新 更多