我不知道如何解释,但我会尝试一下。我有一个 list1 = [('Lista-A', 2000), ('Lista-X', 1000), ('Lista-Z', 5000)])
然后我将有一个
list2 = [['Lista-A', 2000.0],
['Lista-A', 1000.0],
['Lista-A', 666.6666666666666],
['Lista-A', 500.0],
['Lista-A', 400.0],
['Lista-A', 333.3333333333333],
['Lista-X', 1000.0],
['Lista-X', 500.0],
['Lista-X', 333.3333333333333],
['Lista-X', 250.0],
['Lista-X', 200.0],
['Lista-X', 166.66666666666666],
['Lista-Z', 5000.0],
['Lista-Z', 2500.0],
['Lista-Z', 1666.6666666666667],
['Lista-Z', 1250.0],
['Lista-Z', 1000.0],
['Lista-Z', 833.3333333333334]]
现在我需要从列表中选择n个最大的项目2,但是每当2个或3个或更多项目具有相同的数值时,该函数将需要返回到第一个列表并检查其中哪个项目具有最小的值如果从具有相同值的项目中选择具有相同“名称”(Lista-A、Z 或 X)的项目,则必须从第一个列表中选择具有最小数值的项目。我不知道我需要做什么。 我已经尝试对列表进行排序,但后来我不知道继续前进。
对于本例,我需要 6 个最大值,因此预期结果为
list3 = [['Lista-Z', 5000.0],
['Lista-Z', 2500.0],
['Lista-A', 2000.0],
['Lista-Z', 1666.6666666666667],
['Lista-Z', 1250.0],
['Lista-x', 1000.0]]
最佳答案
如果我理解正确的话
list1 = [('Lista-A', 2000), ('Lista-X', 1000), ('Lista-Z', 5000)]
list1 = dict(list1) #Converted to dict for easy lookup
list2 = [['Lista-A', 2000.0],
['Lista-A', 1000.0],
['Lista-A', 666.6666666666666],
['Lista-A', 500.0],
['Lista-A', 400.0],
['Lista-A', 333.3333333333333],
['Lista-X', 1000.0],
['Lista-X', 500.0],
['Lista-X', 333.3333333333333],
['Lista-X', 250.0],
['Lista-X', 200.0],
['Lista-X', 166.66666666666666],
['Lista-Z', 5000.0],
['Lista-Z', 2500.0],
['Lista-Z', 1666.6666666666667],
['Lista-Z', 1250.0],
['Lista-Z', 1000.0],
['Lista-Z', 833.3333333333334]]
list2.sort(key=lambda x: (x[1], -list1.get(x[0], x[0])), reverse=True)
print(list2[:6])
输出:
[['Lista-Z', 5000.0],
['Lista-Z', 2500.0],
['Lista-A', 2000.0],
['Lista-Z', 1666.6666666666667],
['Lista-Z', 1250.0],
['Lista-X', 1000.0]]
关于python - 从 n 个相等的项目中挑选与最小数字相关的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59356530/