Python min() 使用两个键
Python min() use two keys
如何在 Python 内置 min
/max
函数中使用两个键?
例如,我有一个 list
个 dict
(它们用作计数器),如下所示:
[{88: 3, 68: 0, 6: 0}, {88: 2, 68: 1, 6: 0}, {88: 3, 68: 0, 6: 1},
{88: 2, 68: 1, 6: 1}, {88: 3, 68: 0, 6: 2}, {88: 2, 68: 1, 6: 2},
{88: 2, 68: 0, 6: 3}, {88: 2, 68: 1, 6: 0}, {88: 1, 68: 2, 6: 0},
{88: 2, 68: 1, 6: 1}]
我想知道哪个柜台的费用最低:
cost = lambda d: sum(k * v for k, v in d.items())
以及最小计数:
count = lambda d: sum(d.values())
我知道如何用普通代码来完成。我只是想知道是否有任何 pythonic 方法可以做到这一点。
您应该使用与 sort
ing:
完全相同的方法
>>> my_list = [{88: 3, 68: 0, 6: 0}, {88: 2, 68: 1, 6: 0}, {88: 3, 68: 0, 6: 1},
{88: 2, 68: 1, 6: 1}, {88: 3, 68: 0, 6: 2}, {88: 2, 68: 1, 6: 2},
{88: 2, 68: 0, 6: 3}, {88: 2, 68: 1, 6: 0}, {88: 1, 68: 2, 6: 0},
{88: 2, 68: 1, 6: 1}]
>>> sorted(my_list, key=lambda d: (sum(k * v for k, v in d.items()), sum(d.values())))
[{88: 2, 68: 0, 6: 3}, {88: 1, 68: 2, 6: 0}, {88: 2, 68: 1, 6: 0}, {88: 2, 68: 1, 6: 0},
{88: 2, 68: 1, 6: 1}, {88: 2, 68: 1, 6: 1}, {88: 2, 68: 1, 6: 2}, {88: 3, 68: 0, 6: 0},
{88: 3, 68: 0, 6: 1}, {88: 3, 68: 0, 6: 2}]
>>> min(my_list, key=lambda d: (sum(k * v for k, v in d.items()), sum(d.values())))
{88: 2, 68: 0, 6: 3}
>>> max(my_list, key=lambda d: (sum(k * v for k, v in d.items()), sum(d.values())))
{88: 3, 68: 0, 6: 2}
如何在 Python 内置 min
/max
函数中使用两个键?
例如,我有一个 list
个 dict
(它们用作计数器),如下所示:
[{88: 3, 68: 0, 6: 0}, {88: 2, 68: 1, 6: 0}, {88: 3, 68: 0, 6: 1},
{88: 2, 68: 1, 6: 1}, {88: 3, 68: 0, 6: 2}, {88: 2, 68: 1, 6: 2},
{88: 2, 68: 0, 6: 3}, {88: 2, 68: 1, 6: 0}, {88: 1, 68: 2, 6: 0},
{88: 2, 68: 1, 6: 1}]
我想知道哪个柜台的费用最低:
cost = lambda d: sum(k * v for k, v in d.items())
以及最小计数:
count = lambda d: sum(d.values())
我知道如何用普通代码来完成。我只是想知道是否有任何 pythonic 方法可以做到这一点。
您应该使用与 sort
ing:
>>> my_list = [{88: 3, 68: 0, 6: 0}, {88: 2, 68: 1, 6: 0}, {88: 3, 68: 0, 6: 1},
{88: 2, 68: 1, 6: 1}, {88: 3, 68: 0, 6: 2}, {88: 2, 68: 1, 6: 2},
{88: 2, 68: 0, 6: 3}, {88: 2, 68: 1, 6: 0}, {88: 1, 68: 2, 6: 0},
{88: 2, 68: 1, 6: 1}]
>>> sorted(my_list, key=lambda d: (sum(k * v for k, v in d.items()), sum(d.values())))
[{88: 2, 68: 0, 6: 3}, {88: 1, 68: 2, 6: 0}, {88: 2, 68: 1, 6: 0}, {88: 2, 68: 1, 6: 0},
{88: 2, 68: 1, 6: 1}, {88: 2, 68: 1, 6: 1}, {88: 2, 68: 1, 6: 2}, {88: 3, 68: 0, 6: 0},
{88: 3, 68: 0, 6: 1}, {88: 3, 68: 0, 6: 2}]
>>> min(my_list, key=lambda d: (sum(k * v for k, v in d.items()), sum(d.values())))
{88: 2, 68: 0, 6: 3}
>>> max(my_list, key=lambda d: (sum(k * v for k, v in d.items()), sum(d.values())))
{88: 3, 68: 0, 6: 2}