我正在使用 Rest Api 查找地址详细信息。我将一个地址传递给它,它会传回该地址的详细信息:纬度/经度、郊区等。我在响应中使用带有 json() 方法的请求库,并将 json 响应添加到列表中以供稍后分析。
我发现,本地址只有一个匹配项时,json 响应中的“FoundAddress”键包含一个字典,但当找到多个匹配项时,“FoundAddress”键包含一个字典列表。
返回的 json 类似于:
对于单场比赛:
{
'FoundAddress': {AddressDetails...}
}
对于多个匹配项:
{
'FoundAddress': [{Address1Details...}, {Address2Details...}]
}
我不想编写代码来处理单个匹配项和多个匹配项。
如何修改“FoundAddress”,以便在存在单个匹配项时将其更改为包含单个字典条目的列表?这样我就得到了这样的东西:
{
'FoundAddress': [{AddressDetails...}]
}
最佳答案
如果是外部 API 以该格式发送响应,那么您无法真正更改 FoundAddress
本身,因为它总是以该格式到达。
您可以根据需要更改响应,因为您可以完全控制收到的内容:
r = json.parse(response)
fixed = r['FoundAddress'] if (type(r['FoundAddress']) is list) else [r['FoundAddress']]
r['FoundAddress'] = fixed
或者,您可以在地址使用时进行区分:
def func(foundAddress):
# work with a single dictionary instance here
然后:
result = map(func, r['FoundAddress']) if (type(r['FoundAddress']) is list) else [func(r['FoundAddress'])]
但老实说,我想清楚:
if type(r['FoundAddress']) is list:
result = map(func, r['FoundAddress'])
else:
result = func(r['FoundAddress'])
或任何一天在 a if b else c
单行上的响应修正。
关于python - json 将字典项更改为包含一个字典的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47085842/