如何在Python中从两个列表生成json

2024-05-21 04:21:49 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有两个列表:

table_headers = ['name', 'surname']
table_data = ['andrew', 'smith', 'bob', 'richardson']

我怎样才能做出这样的东西:

^{pr2}$

解释我在这里做什么。我正在将一个html表解析为json,我没有找到比生成两个列表更好的方法-一个是头,一个是完整数据,然后我将从两个列表生成一个json。在


Tags: 数据方法namejson列表datahtmlrichardson
3条回答

可能itertools中有一些函数可以使它更简单。在

我将数据分成更小的部分,并使用zip(header, part)来创建对(key,val),并将其添加到字典中

table_headers = ['name', 'surname']
table_data = ['andrew', 'smith', 'bob', 'richardson']

len_headers = len(table_headers)
len_data = len(table_data)

result = dict()

for x in range(0, len_data, len_headers):
    for key, val in zip(table_headers, table_data[x:x+len_headers]):
        if key not in result:
            result[key] = []
        result[key].append(val)

print(result)

结果

^{pr2}$

编辑:itertools.cycle()相同

import itertools

table_headers = ['name', 'surname']
table_data = ['andrew', 'smith', 'bob', 'richardson']

result = dict()

for key, val in zip(itertools.cycle(table_headers), table_data):
    if key not in result:
        result[key] = []
    result[key].append(val)

print(result)

编辑:并使用defaultdict()

import itertools
import collections

table_headers = ['name', 'surname']
table_data = ['andrew', 'smith', 'bob', 'richardson']

result = collections.defaultdict(list)

for key, val in zip(itertools.cycle(table_headers), table_data):
    result[key].append(val)

print(result)

import json
print(json.dumps(result))

您需要遍历table_data列表,或者选择要添加到name列表中的值,对于surname,字典中的值将是一个包含所有姓名和姓氏的列表

table_headers = ['name', 'surname']
table_data = ['andrew', 'smith', 'bob', 'richardson']

dct = {}
idx = 0
for data in table_data:
    key = table_headers[idx]
    #Create value as a list
    if key in dct.keys():
        dct[key].append(data)
    else:
        dct[key] = [data]
    #We need to make sure index of list rolls over to pick the correct element in table_data
    idx = int((idx+1)%2)

输出看起来像。在

^{pr2}$

或者

table_data = ['andrew', 'smith', 'bob', 'richardson', 'joe', 'jonas', 'matt', 'davis']
#Output
#{'name': ['andrew', 'bob', 'joe', 'matt'], 
#'surname': ['smith', 'richardson', 'jonas', 'davis']}

假设可以保证表数据有适当数量的数据条目来创建偶数行(根据您的头计数)

您可以使用好的旧json包,通过

import json 
# a very nice python package 

d = {header: table_data[i::len(table_headers)] for i,header in 
enumerate(table_headers)}


return json.dumps(d)

相关问题 更多 >