[英]Transforming list to dict with list items as keys and list indices as values in python
[英]Transforming JSON keys and values
我在 python 中有一个简单的 json,看起来像:
{
"list": [{
"key1": "value1"
},
{
"key1": "value1"
}
]
}
我想将其转换为以下 json。 任何建议如何在不安装其他库的情况下使用 python 来完成?
{
"list": [{
"keys": {
"name": "key1",
"value": "value1"
}
}, {
"keys": {
"name": "key1",
"value": "value1"
}
}]
}
从你的问题中不确定你是否已经将 json 读入了一个变量,或者它是否在一个文件中。 这是假设你已经在一个变量中了:
in_json = {
"list": [{
"key1": "value1"
},
{
"key2": "value2"
}
]
}
out_json = {"list":[]}
for kd in in_json["list"]:
sub_kd = {"keys": {}}
for k,v in kd.iteritems():
sub_kd["keys"]["name"] = k
sub_kd["keys"]["value"] = v
out_json["list"].append(sub_kd)
print(out_json)
它只是遍历 json 制作字典以附加到out_json
字典。 你可以用 json 库使这个打印漂亮,也可以用它保存到文件
您没有准确指出 JSON 数据的具体内容,因此我在下面的示例代码中将其全部放入一个字符串中,并使用json.loads()
函数将其转换为 Python 字典。 如果它在文件中,您可以改用模块的json.load()
函数。
它还假设"list"
列表中的每个子 JSON 对象仅包含一个键/值对,如您的问题所示。
下面的代码就地更改反序列化的字典,并通过使用json.dumps()
函数重新序列化它来漂亮地打印结果。
请注意,我稍微更改了示例输入 JSON 中的键和值,以便更容易查看它与打印结果之间的对应关系。
import json
json_in = '''
{
"list": [
{
"key1": "value1"
},
{
"key2": "value2"
}
]
}
'''
json_data = json.loads(json_in) # Deserialize.
for i, obj in enumerate(json_data['list']):
# Assumes each object in list contains only one key, value pair.
newobj = { 'name': next(iter(obj.keys())),
'value': next(iter(obj.values()))}
json_data['list'][i] = {'keys': newobj}
print(json.dumps(json_data, indent=4)) # Reserialize and print.
打印结果:
{
"list": [
{
"keys": {
"name": "key1",
"value": "value1"
}
},
{
"keys": {
"name": "key2",
"value": "value2"
}
}
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.