如何仅打印输出的最大值

时间:2020-02-03 14:46:47

标签: python printing python-requests set 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()
    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函数出错了吗?请让我知道您的想法或可能的解决方法。

4 个答案:

答案 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)