Как напечатать только максимальное значение выхода - PullRequest
1 голос
/ 03 февраля 2020

Я видел множество сообщений на эту тему c, но ни одна из них не сработала для меня. По этой причине я задаю свой собственный вопрос, указывающий c на то, что я пытаюсь сделать. Код, который я настроил ниже:

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 ]

2 голосов
/ 03 февраля 2020

Проблема в том, что вы применяете функцию 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 голос
/ 03 февраля 2020

У вас есть пара проблем в вашем коде. Вы перебираете свои данные, создаете новый набор в каждой итерации и применяете функцию 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
0 голосов
/ 03 февраля 2020

Может быть, стоит рассчитать макс после того, как вы закончили для l oop? Также сначала поместите все значения в список.

...
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)
0 голосов
/ 03 февраля 2020

Трудно сказать, что вы делаете, без примеров данных, но похоже, что вы запускаете max для одного значения каждый раз в l oop.

Определите переменную вне циклы, содержащие максимальное найденное значение, и проверьте внутри l oop, является ли текущее значение выше, например:

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)
...