python - json 将字典项更改为包含一个字典的列表

标签 python json dictionary

我正在使用 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/

相关文章:

python - 如何让 Selenium WebDriver 使用 Socks 代理?

python - 在 PythonAnywhere 中更新导入模块后如何在控制台中查看新结果

java - 尝试将用户登录到服务器主机时如何修复 "String can not convert to json object"错误?

java - 用于处理 Map<K, List<V>> 的便捷类

python - 发现 numpy 多年来百分比变化减少

python - 如何使用 Pyrebase 获取具有特定子键的数据

iphone - 使用嵌套 JSON 填充 UITableView

javascript - 如何翻转 JSON 对象的内容?

python - 计算字母出现次数 Python

python - Python 字典中的键到值到键