我试图在元组列表中找到元组,但没有得到如何做到这一点
我有以下list (id, price, count)
[('1', 3.0, 6), ('2', 2.0, 2), ('3', 2.0, 5), ('4', 4.0, 2), ('5', 2.0, 5), ('
6', 3.0, 6), ('7', 3.0, 5), ('8', 2.0, 5), ('9', 3.0, 5), ('10', 3.0, 5)]
查找元组的条件是:
price
。 value
。 请告诉我如何在列表中找到元组来实现这些条件。
答案 0 :(得分:2)
您可以利用min / max内置功能搜索您的磁贴。它们中的任何一个都可以工作,只有你需要更改键功能才能使用其中一个
对于数值,否定值会改变其顺序
a > b -> -a < -b
。使用这些知识,您可以将密钥构建为两个元素的元组,顺序取决于优先级顺序。根据您是否使用max / min,您需要否定适当的变量,
>>> min(t, key = lambda e: (e[1], -e[2]))
('3', 2.0, 5)
>>> max(t, key = lambda e: (-e[1], e[2]))
('3', 2.0, 5)
答案 1 :(得分:1)
您可以从列表项的两个元素构建sorted的密钥:(price, -count)
(减去计数用于反转方向 - 更大的值将首先出现在结果中):
t = [('1', 3.0, 6), ('2', 2.0, 2), ('3', 2.0, 5), ('4', 4.0, 2), ('5', 2.0, 5),
('6', 3.0, 6), ('7', 3.0, 5), ('8', 2.0, 5), ('9', 3.0, 5), ('10', 3.0, 5)]
>>> sorted(t, key=lambda i: (i[1], -i[2]))
[('3', 2.0, 5), ('5', 2.0, 5), ('8', 2.0, 5), ('2', 2.0, 2), ('1', 3.0, 6),
('6', 3.0, 6), ('7', 3.0, 5), ('9', 3.0, 5), ('10', 3.0, 5), ('4', 4.0, 2)]
要查找只有一个元素,您可以使用min函数将相同的元组作为关键参数:
>>> min(t, key=lambda i: (i[1], -i[2]))
('3', 2.0, 5)
答案 2 :(得分:0)
您可以按Python docs中提到的方法对多个键进行排序。
x = [('1', 3.0, 6), ('2', 2.0, 2), ('3', 2.0, 5), ('4', 4.0, 2), ('5', 2.0, 5),
('6', 3.0, 6), ('7', 3.0, 5), ('8', 2.0, 5), ('9', 3.0, 5), ('10', 3.0, 5)]
首先按第二优先级键count
排序:
x1 = sorted(x, key=lambda t: t[2], reverse=True)
然后按第一个键'price'对结果进行排序:
x2 = sorted(x1, key=lambda t: t[1])
现在,最佳元组是x2
的第一个元素。找到与x2中的最佳值匹配的所有值:
optimal = (x2[0][1], x2[0][2])
[v for v in x2 if v[1]==optimal[0] and v[2]==optimal[1]]
# -> [('3', 2.0, 5), ('5', 2.0, 5), ('8', 2.0, 5)]