>source

특정 값을 반환하기 위해 두 사전 사이의 차이를 계산하려고합니다.

다른 결과를 반환해야하는 다른 값을 입력했지만 결과는 변경되지 않습니다.

diets = {"normal" : {'p': '32.50', 'c': '60', 'f': '40.86'},
         "oncology" : {'p': '35', 'c': '52.50', 'f': '37.63'},
         "cardiology" : {'p': '32.50', 'c': '30', 'f': '26.88'},
         "diabetes" : {'p': '20', 'c': '27.50', 'f': '27.95'},
         "kidney" : {'p': '15', 'c': '55', 'f': '23.65'}}
amounts = {'p': p, 'c': c, 'f': f}
value = { k : diets[k] for k in set(diets) - set(amounts) }
calculate_error = min(value)
print(calculate_error)

32, 60 및 40을 입력하면 반환 결과는 정상이지만 종양학이 대신 반환됩니다.


  • 답변 # 1

    이 작업을 수행 할 때 만들고있는 값을 확인해야합니다.

    set(diets)
    
    

    키 목록 일뿐입니다.

    {'cardiology', 'diabetes', 'kidney', 'normal', 'oncology'}
    
    

    다른 키 목록을 빼면 공통된 값이 없기 때문에 원래 목록 만 가져옵니다.

    실제로 항목을 살펴보고 빼기를 수행하여 차이를 가져와야합니다. 그런 다음 diff의 합계와 해당 합계의 최소값을 찾을 수 있습니다.

    한 가지 방법은 :

    diets = {"normal" : {'p': '32.50', 'c': '60', 'f': '40.86'},
             "oncology" : {'p': '35', 'c': '52.50', 'f': '37.63'},
             "cardiology" : {'p': '32.50', 'c': '30', 'f': '26.88'},
             "diabetes" : {'p': '20', 'c': '27.50', 'f': '27.95'},
             "kidney" : {'p': '15', 'c': '55', 'f': '23.65'}}
    amounts = {'p': 32., 'c': 60., 'f': 40.}
    mins = [(diet, sum([abs(amounts[k] - float(d[k])) for k in amounts])) for diet, d in diets.items()]
    the_min = min(mins, key = lambda x: x[1])
    
    

    mins  다음과 같습니다 :

    [('normal', 1.3599999999999994),
     ('oncology', 12.869999999999997),
     ('cardiology', 43.620000000000005),
     ('diabetes', 56.55),
     ('kidney', 38.35)]
    
    

    the_min  다음과 같습니다 :

    ('normal', 1.3599999999999994)
    
    

  • 답변 # 2

    value 가 완전히 혼란스러워 보입니다.  

    >>> diets = {"normal" : {'p':'32.50', 'c':'60', 'f':'40.86'},
    ...          "oncology" : {'p':'35', 'c':'52.50', 'f':'37.63'},
    ...          "cardiology" : {'p':'32.50', 'c':'30', 'f':'26.88'},
    ...          "diabetes" : {'p':'20', 'c':'27.50', 'f':'27.95'},
    ...          "kidney" : {'p':'15', 'c':'55', 'f':'23.65'}}
    >>> set(diets)
    {'kidney', 'cardiology', 'oncology', 'normal', 'diabetes'}
    >>> amounts = {'p':32, 'c':60, 'f':40}
    >>> set(amounts)
    {'c', 'f', 'p'}
    >>> set(diets) - set(amounts)
    {'cardiology', 'diabetes', 'kidney', 'oncology', 'normal'}
    >>> value = { k : diets[k] for k in set(diets) - set(amounts) }
    >>> value
    {'cardiology': {'p': '32.50', 'c': '30', 'f': '26.88'},
     'diabetes': {'p': '20', 'c': '27.50', 'f': '27.95'},
     'kidney': {'p': '15', 'c': '55', 'f': '23.65'},
     'oncology': {'p': '35', 'c': '52.50', 'f': '37.63'},
     'normal': {'p': '32.50', 'c': '60', 'f': '40.86'}}
    >>> min(value)
    'cardiology'
    
    
    내가 당신이 cardiology 를 얻을 것으로 기대한다고 말했다 , 즉 diets.keys() 의 분 즉, 다이어트의 가치는 예를 들어 str입니다. '32 .50 ', 계산하기 전에 변환해야합니다.

  • 이전 amazon web services - DynamoDB 고객 주문의 기본 키로 이메일을 보내시겠습니까?
  • 다음 각도 7에서 JSON HTML 태그를 텍스트 변환기로 수정하는 방법