我见过很多关于该主题的文章,但没有一个对我有用。因此,我要问自己关于我要做什么的问题。我设置的代码如下。
def get_assets_for_group(ip):
decom_match = str(ip)
url5 = server + path1
response = requests.request("GET", url5, headers=headers, verify=False)
data = response.json()
for i in data['resources']:
url = server+path2+str(i)
response = requests.request("GET", url, headers=headers, verify=False)
data = response.json()
if decom_match in data["ip"]:
d = {i}
max_value = max(d)
print("Match found!", max_value)
当我只希望它返回最大数字时,此代码的输出将为我提供所有匹配的值。输出示例如下。
Match found! 111618
Match found! 112367
Match found! 115401
Match found! 115618
Match found! 116265
Match found! 116400
Match found! 117653
我使用max函数出错了吗?请让我知道您的想法或可能的解决方法。
答案 0 :(得分:2)
问题在于,每次发现匹配值时,您将max()
函数应用于仅包含i
的集合,然后打印结果。纠正此问题的一种方法是创建一个初始集matches
,然后每次找到匹配项时,将其添加到该集合中。在响应中搜索完匹配项后,可以在此集合上使用max()
并打印结果。
类似这样的东西:
def get_assets_for_group(ip):
decom_match = str(ip)
url5 = server + path1
response = requests.request("GET", url5, headers=headers, verify=False)
data = response.json()
matches = set()
for i in data['resources']:
url = server+path2+str(i)
response = requests.request("GET", url, headers=headers, verify=False)
data = response.json()
if decom_match in data["ip"]:
matches.add(i)
if matches:
print("Match found!", max(matches))
答案 1 :(得分:1)
您的代码中有几个问题。您遍历数据,在每次迭代中创建一个新集合,然后仅使用一个条目就应用此新集合的max函数,因此它始终是您集合中的一个条目。您应该用所有找到的匹配项来填充集合,然后再应用max()
函数,或者如果发现新的最大值,则检查每次迭代:
max_value = None
for i in data['resources']:
url = server+path2+str(i)
response = requests.request("GET", url, headers=headers, verify=False)
data = response.json()
if decom_match in data["ip"]:
if max_value == None:
max_value = i
else:
max_value = max(i, max_value)
if max_value != None:
print("Match found!", max_value)
return max_value
答案 2 :(得分:0)
很难在没有示例数据的情况下告诉您正在做什么,但是看起来您每次循环中都在单个值上运行max
。
在循环外部定义一个包含最大发现值的变量,并在循环内部检查当前值是否较高,如下所示:
def get_assets_for_group(ip):
decom_match = str(ip)
url5 = server + path1
response = requests.request("GET", url5, headers=headers, verify=False)
data = response.json()
max_value = 0 # initialize max value
for i in data['resources']:
url = server+path2+str(i)
response = requests.request("GET", url, headers=headers, verify=False)
data = response.json()
if decom_match in data["ip"]:
d = {i}
# check if value is higher than last found value
if (d > max_value):
max_value = d
print("Match found!", max_value)
答案 3 :(得分:0)
也许是在您的for循环完成之后计算最大值的问题?同时将所有值放在列表中。
...
d=[]
for i in data['resources']:
url = server+path2+str(i)
response = requests.request("GET", url, headers=headers, verify=False)
data = response.json()
if decom_match in data["ip"]:
d.append(i)
max_value = max(d)
print("Match found!", max_value)