[英]How to make one dict from comma separated string dicts?
我有两个字符串变量:
a = [
{
'hash': 'same hash for all photos'
'name': 'test.jpg'
},
{
'hash': 'same hash for all photos'
'name': 'test2.jpg'
},
{
'hash': 'same hash for all photos'
'name': 'test3.jpg'
}
]
b = [
{
'Exists': [
{
'db': 'main_db'
'size': 'photo_size'
'path': 'path'
},
{
'db': 'main_db2'
'size': 'photo_size'
'path': 'path'
}],
'Exists': for another photo
}
]
最后我需要一个json 。 'Exists' - 是每张照片的数据,所以 append 对照片有好处。 默认情况下,它们不是 str - 它们是自定义类型的数据。
我试过的
我尝试使用 str 上的json.dumps
从它们制作 json 字符串。 它有效,但我无法连接它们。 从列表创建字典,然后连接字典,但ast.literal_eval
崩溃。 将两个字符串连接为一个并手动更改字符创建一个字典。 结果 - json.dumps
出现错误。
有没有一种简单的方法可以做到这一点? 或者至少 - 有什么想法吗?
更新
Output print(b)
:
[{
'Exists': [
{
'db': 'db_main',
'size': 5451.0,
'path': '/www/photos3/'
},
{
'db': 'db_main',
'size': 5901.0,
'path': '/www/photos1/'
},
{
'db': 'db_add',
'size': 4418.0,
'path': '/www/photos4/'
}
]
}, {
'Exists': [
{
'db': 'db_main',
'size': 6461.0,
'path': '/www/photos1/'
},
{
'db': 'db_main',
'size': 3941.0,
'path': '/www/photos1/'
},
{
'db': 'db_main',
'size': 7428.0,
'path': '/www/photos3/'
}
]
}]
关于类型。
print(type(b))
- 列表
print(type(b[0]))
- zeep.objects.MatchedArray
示例 json 输出:
{
'1':[{
'name': ''
'data_from_exists':[{
'db':...
'size':...
'path':...
},
{'db':...
'size':...
'path':...
}]
}],
'2': and same as first
}
您可以尝试将它们放入一个组合列表中:
new_list = []
for i in range(len(a)):
new_list.append({'photo': a[i], 'exist': b[i]})
json.dumps(new_list)
根据您的编辑,这a
我正在使用的:
[{'hash': 'same hash for all photos', 'name': 'test.jpg'},
{'hash': 'same hash for all photos', 'name': 'test2.jpg'},
{'hash': 'same hash for all photos', 'name': 'test3.jpg'}]
这是b
:
[{'Exists': [{'db': 'db_main', 'size': 5451.0, 'path': '/www/photos3/'},
{'db': 'db_main', 'size': 5901.0, 'path': '/www/photos1/'},
{'db': 'db_add', 'size': 4418.0, 'path': '/www/photos4/'}]},
{'Exists': [{'db': 'db_main', 'size': 6461.0, 'path': '/www/photos1/'},
{'db': 'db_main', 'size': 3941.0, 'path': '/www/photos1/'},
{'db': 'db_main', 'size': 7428.0, 'path': '/www/photos3/'}]}]
对于以下选项, a
和b
的长度必须相同。 示例数据在a
中有 3 个图像,但在b
中只有 2 个“存在”,因此结果将匹配每个中的前两个项目。
info
Name: Exists data
:info = {i['name']: j['Exists'] for i, j in zip(a, b)}
json.dumps(info)
Output 是:
{
"test.jpg": [
{
"db": "db_main",
"size": 5451.0,
"path": "/www/photos3/"
},
{
"db": "db_main",
"size": 5901.0,
"path": "/www/photos1/"
},
{
"db": "db_add",
"size": 4418.0,
"path": "/www/photos4/"
}
],
"test2.jpg": [
{
"db": "db_main",
"size": 6461.0,
"path": "/www/photos1/"
},
{
"db": "db_main",
"size": 3941.0,
"path": "/www/photos1/"
},
{
"db": "db_main",
"size": 7428.0,
"path": "/www/photos3/"
}
]
}
# Python 3.5 or greater
info = {str(idx): {**i, **j} for idx, (i, j) in enumerate(zip(a, b), start=1)}
json.dumps(info)
Output:
{
"1": {
"hash": "same hash for all photos",
"name": "test.jpg",
"Exists": [
{
"db": "db_main",
"size": 5451.0,
"path": "/www/photos3/"
},
{
"db": "db_main",
"size": 5901.0,
"path": "/www/photos1/"
},
{
"db": "db_add",
"size": 4418.0,
"path": "/www/photos4/"
}
]
},
"2": {
"hash": "same hash for all photos",
"name": "test2.jpg",
"Exists": [
{
"db": "db_main",
"size": 6461.0,
"path": "/www/photos1/"
},
{
"db": "db_main",
"size": 3941.0,
"path": "/www/photos1/"
},
{
"db": "db_main",
"size": 7428.0,
"path": "/www/photos3/"
}
]
}
}
{image name: {'hash': hash, 'Exists': exists data}}
更合理的布局:(您可以轻松地修改它以使用 hash 作为主键,而不是名称。)
info = {i['name']: {'hash': i['hash'],
'Exists': j['Exists']}
for i, j in zip(a, b)}
Output:
{
"test.jpg": {
"hash": "same hash for all photos",
"Exists": [
{
"db": "db_main",
"size": 5451.0,
"path": "/www/photos3/"
},
{
"db": "db_main",
"size": 5901.0,
"path": "/www/photos1/"
},
{
"db": "db_add",
"size": 4418.0,
"path": "/www/photos4/"
}
]
},
"test2.jpg": {
"hash": "same hash for all photos",
"Exists": [
{
"db": "db_main",
"size": 6461.0,
"path": "/www/photos1/"
},
{
"db": "db_main",
"size": 3941.0,
"path": "/www/photos1/"
},
{
"db": "db_main",
"size": 7428.0,
"path": "/www/photos3/"
}
]
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.