我有一个有三个键的dict,它由一个长度相同的列表组成。例如,键“a”有一个长度为5的列表,由0到6000的值组成。类似地,长度为5的键“b”的值范围为0到1.0。最后,具有相同长度的键“c”的值介于(1x1)到(2000x2000)之间。你知道吗
我必须选择一个介于0和4之间的索引,条件是“a”的值不能小于200。“b”的值不能低于0.95。然后,在满足这两个条件的指标中选择“c”的最高值。你知道吗
虚拟数据如下所示
index a b c
0 600 0.99 (100x105)
1 150 1.0 (50x40)
2 820 0.75 (500x480)
3 500 0.96 (200x190)
4 400 0.97 (120x110)
这里,根据这两个条件,我可以将索引过滤为0、3和4。在这三个指数中,“c”的最大值是指数3。所以答案是3 500 0.96 (200x190)
如何以最有效的方式选择此选项?我想我可能需要用熊猫。我怎么能用熊猫来做呢?还有,如何以最具Python的方式来做呢?你知道吗
我对编码比较陌生。我很难弄明白。你知道吗
编辑: dict的代码片段
{
'a' : [600, 150, 820, 500, 400]
'b' : [0.99, 1.0, 0.75, 0.96, 0.97]
'c' : [(100,105), (50,40), (500,480), (200,190), (120,110)]
}
这对于
numpy
来说是相对简单的,尽管c
列的稍微奇怪的格式提供了一个有趣的转折点。你知道吗一个没有numpy的简单解决方案,使用列表切片
以下是您的数据:
这是解决问题的一种方法,只对字典中的列表进行一次检查:
输出:
当然,您可以不用导入和使用
mul()
函数来实现这一点。它只是使循环条件显得有点紧凑。mul()
只是将元组的两部分相乘。要在没有mul()
的情况下执行此操作,请搜索(mul(*d['c'][3]) > mul(*d['c'][found_i]))
,并用较长的表达式((d['c'][3][0]*d['c'][3][1]) > (d['c'][found_i][0]*d['c'][found_i][1]))
替换(mul(*d['c'][3]) > mul(*d['c'][found_i]))
相关问题 更多 >
编程相关推荐