我正在努力找出循环遍历函数的最佳方法。这个API的输出是一个Graph Connection,我有点不喜欢这个元素。我确实需要从api输出中获取ID,并将它们以字典或某种形式传递给另一个API调用。
****请注意,原始输出是图形连接。...print(type(api_response)确实将其显示为列表,但是如果我执行print(type(api_response [0] ))返回
这是api调用的原始输出:
[{'_ from':无,'至':{'id':'5c9941fcdd2eeb6a6787916e','type':'user'}},{'_from':无,'to':{'id': '5cc9055fcc5781152ca6eeb8','type':'user'}},{'_from':None,'to':{'id':'5d1cf102c94c052cf1bfb3cc','type':'user'}}}]
这是我到目前为止的代码.....
api_response = api_instance.graph_user_group_members_list(group_id, content_type, accept,limit=limit, skip=skip, x_org_id=x_org_id)
def extract_id(result):
result = str(result).split(' ')
for i, r in enumerate(result):
if 'id' in r:
id = (result[i+1].translate(str.maketrans('', '', string.punctuation)))
print( id )
return id
extract_id(api_response)
def extract_id(result):
result = str(result).split(' ')
for i, r in enumerate(result):
if 'id' in r:
id = (result[i+8].translate(str.maketrans('', '', string.punctuation)))
print( id )
return id
extract_id(api_response)
def extract_id(result):
result = str(result).split(' ')
for i, r in enumerate(result):
if 'id' in r:
id = (result[i+15].translate(str.maketrans('', '', string.punctuation)))
print( id )
return id
extract_id(api_response)
我已经能够使用函数来提取ID,但是我是通过字符串来完成的。我需要一个可伸缩的解决方案,可以将这些ID传递给另一个API调用。
我尝试使用for循环,但是因为它是1个字符串并且i + 1定义了id的位置,所以它是多余的,并且仅多次输出id的1。
我使用这些功能中的每一个都接收到正确的输出,但是,它不是可伸缩的.....,但这不是解决方案。请帮助指导我...
答案 0 :(得分:0)
因此,为了解决作为字符串问题的响应,我建议使用python的builtin json module。具体来说,方法.loads()
可以将字符串转换为字典或字典列表。您可以从那里遍历列表或字典,并检查密钥是否等于'id'
。这是一个基于您说的响应示例的示例。
import json
s = "[{'_from': None, 'to': {'id': '5c9941fcdd2eeb6a6787916e', 'type': 'user'}}, {'_from': None, 'to': {'id': '5cc9055fcc5781152ca6eeb8', 'type': 'user'}}, {'_from': None, 'to': {'id': '5d1cf102c94c052cf1bfb3cc', 'type': 'user'}}]"
# json uses double quotes and null; there is probably a better way to do this though
s = s.replace("\'", '\"').replace('None', 'null')
response = json.loads(s) # list of dicts
for d in response:
for key, value in d['to'].items():
if key == 'id':
print(value) # or whatever else you want to do
# 5c9941fcdd2eeb6a6787916e
# 5cc9055fcc5781152ca6eeb8
# 5d1cf102c94c052cf1bfb3cc