【发布时间】:2017-10-10 22:58:23
【问题描述】:
假设我有一个处理输入并在列表中返回 JSON 数据的函数,例如:
def findme (name):
data = ''
address = 'http://someaddresswithname&format=json'
response = urllib.request.urlopen (address)
content = response.read ()
if content:
data = json.loads (content.decode ('utf-8'))
return data
if __name__ == '__main__':
listfound = []
names = ['bob', 'alice']
listfound = map (findme, name)
返回的数据包含:
[{'A': 1, 'B': 2'}], [{'A': 5, 'B': 9}]
因为我使用的是地图,所以它会创建另一个包含相同数据的列表。 Listfound 现在是
[[{'A': 1, 'B': 2'}], [{'A': 5, 'B': 9}]]
外部列表只有 1 个元素,不需要在列表中。我可以遍历它并创建另一个列表,但这会降低使用“地图”的效率。如何让 map 像这样返回正常列表?
[{'A': 1, 'B': 2}, {'A': 5, 'B': 9}]
更新 1 - 将名称更新为 2 个元素而不是 1 个 - 最初的名称 = ['bob']。还修复了返回以匹配其他名称元素的实际列表。
我尝试过一种方法,但它涉及嵌套循环。还有更好的选择吗?
>>> results = [[{'A': 1, 'B': 2}], [{'A': 5, 'B': 9}]]
>>> newresult = [item for sublist in results for item in sublist]
>>> newresult
[{'B': 2, 'A': 1}, {'B': 9, 'A': 5}]
【问题讨论】:
-
listfound = listfound[0]或listfound, = listfound -
如此明显。我把事情复杂化了。谢谢。
-
但是你为什么还要使用地图呢?就做
listfound = findme('bob') -
因为它是一个列表。 name = ['bob', 'alice', ...]
-
但是如果您只取结果列表中的第一项,这意味着您只处理
name中的第一项,因此可以直接调用findme。
标签: json list dictionary python-3.5