将带有元组的dict转换为json



我有以下输入:

input =  {'foo': [('aaa', 'bbb'), ('ccc', 'ddd')], 'buz': [('xxx', 'yyy')], 'bar': [[]]})

我想把它转换成类似的东西:

"name": "foo"
"values": [
{    
"first":"aaa", 
"last":"bbb"
},
{ "first": "ccc",
"last":"ddd
}
],
"name": "buz"
"values": [
{    
"first":"xxx", 
"last":"yyy"
}],
"name" : "bar
"values":[]

我试着做一些类似的事情:

[{'name': k, 'values': [(v1, v2)]} for k, [v1, v2] in input.items()]

但是得到这个错误:

ValueError: not enough values to unpack (expected 2, got 1)

我认为这是因为在某些情况下,值列表是空的

您需要嵌套列表理解:

input_data =  {'foo': [('aaa', 'bbb'), ('ccc', 'ddd')], 'buz': [('xxx', 'yyy')], 'bar': [[]]}
[{
"name": key, 
"values": [
{"first": v[0], "last": v[1]} for v in value if v
]}
for key, value in input_data.items()]

解决方案是将该值视为单个值:

[{
"name": key, 
"values": [
{"first": names[0], "last": names[1]} for names in value if names
] 
for key, value in input.items() ]

像这样的Smth:

from functools import partial
keys = ("first", "last")
data = {"foo": [("aaa", "bbb"), ("ccc", "ddd")],
"buz": [("xxx", "yyy")],
"bar": [[]]}
print([{"name": key,
"values": [dict(i) for i in map(partial(zip, keys), filter(None, value))]}
for key, value in data.items()])

输出:

[{'name': 'foo', 'values': [{'first': 'aaa', 'last': 'bbb'}, {'first': 'ccc', 'last': 'ddd'}]}, {'name': 'buz', 'values': [{'first': 'xxx', 'last': 'yyy'}]}, {'name': 'bar', 'values': []}]

最新更新