提问人:CLT00 提问时间:11/17/2023 最后编辑:CowCLT00 更新时间:11/17/2023 访问量:39
使用 pandas 从两个列表创建 JSON 数组
Creating a JSON array from two lists using pandas
问:
是否可以将两个列表压缩到一个JSON数组中?
输入:
keys=["['os','dist','rel','flag']",
"['os','dist']",
"['os','dist','rel']",
"['os','version','rel','flag']"]
vals=["['linux','centos','9','y']",
"['linux','ubuntu']",
"['linux','rhel','8']",
"['linux','8','.03','y']"]
df=pd.DataFrame({'key':keys,'val':vals})
期望输出:
{'key':'os','val':'linux'},{'key':'dist','val':'rhel'},{'key':'rel','val':'9'},{'key':'flag','val':'y'}
...
...
我是 python 的新手,尝试了 list/map/lambda/zip 的几种不同组合,但到目前为止没有成功。
答:
1赞
Tim Roberts
11/17/2023
#1
这是可以做到的,但你当然不需要或想要熊猫。我的猜测是这不是您想要的实际结果,但这是如何做到的。
import ast
keys=["['os','dist','rel','flag']",
"['os','dist']",
"['os','dist','rel']",
"['os','version','rel','flag']"]
vals=["['linux','centos','9','y']",
"['linux','ubuntu']",
"['linux','rhel','8']",
"['linux','8','.03','y']"]
keys = [ast.literal_eval(k) for k in keys]
vals = [ast.literal_eval(v) for v in vals]
results = []
for kk,vv in zip(keys, vals):
results.extend( [{'key': k, 'val': v} for k,v in zip(kk,vv)] )
from pprint import pprint
pprint(results)
输出:
[{'key': 'os', 'val': 'linux'},
{'key': 'dist', 'val': 'centos'},
{'key': 'rel', 'val': '9'},
{'key': 'flag', 'val': 'y'},
{'key': 'os', 'val': 'linux'},
{'key': 'dist', 'val': 'ubuntu'},
{'key': 'os', 'val': 'linux'},
{'key': 'dist', 'val': 'rhel'},
{'key': 'rel', 'val': '8'},
{'key': 'os', 'val': 'linux'},
{'key': 'version', 'val': '8'},
{'key': 'rel', 'val': '.03'},
{'key': 'flag', 'val': 'y'}]
评论
0赞
JNevill
11/17/2023
这是一个如此奇怪的输出。我不禁认为,一个更明智的输出是,不会破坏内部列表的关系,即使 OP 准确地要求您生成的🤷输出results = [[{k:v} for k,v in zip(kk,vv)] for kk,vv in zip(keys, vals)]
1赞
Tim Roberts
11/17/2023
你是绝对正确的,事实上,当我写这个回应时,这正是我让代码生成的,因为我认为这是对的。当我意识到它与他说的不符时,我正要发布输出。
0赞
JNevill
11/17/2023
我不得不写那段代码只是为了挠痒痒,让一切都与世界正确。
评论