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

假设我有两个列表:


table_headers = ['name', 'surname']

table_data = ['andrew', 'smith', 'bob', 'richardson']

我怎么能做这样的事情:


json = {

    'name': ['andrew', 'bob'], 

    'surname': ['smith','richardson']

    }

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


波斯汪
浏览 274回答 3
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)结果{'name': ['andrew', 'bob'], 'surname': ['smith', 'richardson']}编辑:与itertools.cycle()import itertoolstable_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 itertoolsimport collectionstable_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 jsonprint(json.dumps(result))

撒科打诨

假设保证表数据具有正确数量的数据条目以创建偶数行(根据您的标题计数)您可以使用良好的旧 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)

弑天下

您可以按以下方式本机执行此操作(无需任何导入或特殊功能):table_headers = ['name', 'surname']table_data = ['andrew', 'smith', 'bob', 'richardson']num_of_cols = len(table_headers)cols = [[x for x in table_data[i::num_of_cols]] for i in range(num_of_cols)]print(dict(zip(table_headers, cols)))## {'name': ['bob', 'andrew'], 'surname': ['smith', 'richardson']}添加更多数据:table_data.extend(['john', 'doe'])cols = [[x for x in table_data[i::num_of_cols]] for i in range(num_of_cols)]print(dict(zip(table_headers, cols)))  ## {'name': ['andrew', 'bob', 'john'], 'surname': ['smith', 'richardson', 'doe']}添加更多标题列:table_headers = ['name', 'surname', 'middle_initial']table_data = ['andrew', 'smith', 'a.','bob', 'richardson', 'b.']num_of_cols = len(table_headers)cols = [[x for x in table_data[i::num_of_cols]] for i in range(num_of_cols)]print(dict(zip(table_headers, cols)))  ## {'name': ['andrew', 'bob'], 'surname': ['smith', 'richardson'], 'middle_initial': ['a.', 'b.']}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python