使用zip从列表创建json

Abh*_*hek 5 python

我有2个列表如下:

>> a = [u'username', u'first name', u'last name']
>> b = [[u'user1', u'Jack', u'Dawson'], [u'user2', u'Roger', u'Federer']]
Run Code Online (Sandbox Code Playgroud)

我试图获得如下输出json:

[
  {
    "username":"user1",
    "first name":"Jack",
    "last name":"Dawson"
  },
  {
    "username":"user2",
    "first name":"Roger",
    "last name":"Federer"
  }
]
Run Code Online (Sandbox Code Playgroud)

我试图使用zip命令如下:

>> x = []
>> for i in range(0, len(b)):
..   x += zip(a,b[i])
..
Run Code Online (Sandbox Code Playgroud)

但这并不是我想要的输出.我该如何实现?

Jun*_*sor 8

zip将只返回一个元组列表.您忘了将此元组列表转换为字典.你可以使用dict构造函数来完成它.您也可以完全避免循环:[dict(zip(a, row)) for row in b]将创建所需的词典列表.然后在构建列表后,您可以转换为json.例如:

a = [u'username', u'first name', u'last name']
b = [[u'user1', u'Jack', u'Dawson'], [u'user2', u'Roger', u'Federer']]
import json
print(json.dumps([dict(zip(a, row)) for row in b], indent=1))
Run Code Online (Sandbox Code Playgroud)

输出:

[
 {
  "username": "user1", 
  "first name": "Jack", 
  "last name": "Dawson"
 }, 
 {
  "username": "user2", 
  "first name": "Roger", 
  "last name": "Federer"
 }
]
Run Code Online (Sandbox Code Playgroud)