Python 计算两个字典之间的最小差值
我试图计算两个字典之间的差异以返回一个特定的值 我输入了不同的值,这些值将返回不同的结果,但结果保持不变Python 计算两个字典之间的最小差值,python,dictionary,min,Python,Dictionary,Min,我试图计算两个字典之间的差异以返回一个特定的值 我输入了不同的值,这些值将返回不同的结果,但结果保持不变 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'},
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时,返回的结果应该是正常的,但返回的是oncology(肿瘤学)您似乎完全搞不清楚
值是什么
>>> 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'
也就是说,我希望您能获得心脏病学
,即diets.keys()
也就是说,请注意饮食中的值是str,例如“32.50”,在进行任何计算之前,您需要转换这些值。看起来您完全搞不清楚值是什么
>>> 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'
也就是说,我希望您能获得心脏病学
,即diets.keys()
也就是说,请注意饮食中的值是str,例如“32.50”,在进行任何计算之前,您需要转换这些值。进行此操作时,您应该查看正在创建的值:
set(diets)
这只是一个密钥列表
{'cardiology', 'diabetes', 'kidney', 'normal', 'oncology'}
当减去其他键列表时,只得到原始列表,因为没有公共值
你需要一步一步地完成这些项目,然后进行减法运算以得到差异。然后你可以求出微分的和,以及该和的最小值
一种方法是:
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])
分钟
将是:
[('normal', 1.3599999999999994),
('oncology', 12.869999999999997),
('cardiology', 43.620000000000005),
('diabetes', 56.55),
('kidney', 38.35)]
('normal', 1.3599999999999994)
最小值将为:
[('normal', 1.3599999999999994),
('oncology', 12.869999999999997),
('cardiology', 43.620000000000005),
('diabetes', 56.55),
('kidney', 38.35)]
('normal', 1.3599999999999994)
执行此操作时,应查看正在创建的值:
set(diets)
这只是一个密钥列表
{'cardiology', 'diabetes', 'kidney', 'normal', 'oncology'}
当减去其他键列表时,只得到原始列表,因为没有公共值
你需要一步一步地完成这些项目,然后进行减法运算以得到差异。然后你可以求出微分的和,以及该和的最小值
一种方法是:
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])
分钟
将是:
[('normal', 1.3599999999999994),
('oncology', 12.869999999999997),
('cardiology', 43.620000000000005),
('diabetes', 56.55),
('kidney', 38.35)]
('normal', 1.3599999999999994)
最小值将为:
[('normal', 1.3599999999999994),
('oncology', 12.869999999999997),
('cardiology', 43.620000000000005),
('diabetes', 56.55),
('kidney', 38.35)]
('normal', 1.3599999999999994)
您的金额词典中的p
、c
和f
值是多少?p=32、c=60和f=40。不管输入的是什么数字,都应该返回最小的绝对差值p
,c
和f
在金额
字典中的值?p=32,c=60和f=40。不管输入什么数字,都应该返回最小的绝对差。谢谢。但是我想打印不带数字的\u min,只打印文本。@JordanGamson这个\u min
只是一个元组。只打印文本:print(最小值[0])
。你需要以分钟为单位的数字,因为这是min
用来找到最小值的,但你不需要使用或保留它们。非常感谢。但是我想打印不带数字的\u min,只打印文本。@JordanGamson这个\u min
只是一个元组。只打印文本:print(最小值[0])
。您需要以分钟为单位的数字,因为这是min
用于查找最小值的数字,但您不需要使用或保留它们。