从python中的tupel列表中提取n-tupels

时间:2018-03-11 20:54:34

标签: python

我在一些计算后得到了一个元组列表,其中包含[(str, str, float), (...), ...]格式:

output: [('inputData_4', 'targetData_1', 0.09739792547374054),
         ('inputData_4', 'targetData_1', 0.09739792718209167),
         ('inputData_4', 'targetData_1', 0.09739793368940086),
         ('inputData_2', 'targetData_1', 0.10266894735114324),
         ('inputData_2', 'targetData_1', 0.1026689508485586),
         ('inputData_2', 'targetData_1', 0.10873575415245394),
         ('inputData_3', 'targetData_1', 0.1464233452565107),
         ('inputData_3', 'targetData_1', 0.14642335418508975),
         ('inputData_3', 'targetData_1', 0.14642336077619336),
         ('inputData_1', 'targetData_1', 0.1561837827131314),
         ('inputData_1', 'targetData_1', 0.15618378709179737),
         ('inputData_1', 'targetData_1', 0.15618379092496212)]

使用float作为键值sorted(meanScores, key=lambda tup: tup[2])对列表进行排序,如您所见,每个元组重复三次。

如何只从整个列表中提取最小浮点值并且不重复它的三个图表(如果列表包含至少三个图表)?

谢谢!

修改

重复的tupels的顺序也可以不同地列出:

output: [('inputData_4', 'targetData_1', 0.09739792547374054),
         ('inputData_2', 'targetData_1', 0.1026689508485586),
         ('inputData_4', 'targetData_1', 0.09739793368940086),
         ('inputData_2', 'targetData_1', 0.10266894735114324),
         ('inputData_2', 'targetData_1', 0.10873575415245394),
         ('inputData_4', 'targetData_1', 0.09739792718209167),
         ...]

1 个答案:

答案 0 :(得分:2)

请注意确定要了解您的需求,但这是我理解的:您有一个由两个字符串和一个浮点值组成的元组列表。您希望将字符串相等的连续元组分组,并找到浮点值最小的元组。

如果您的元组已排序,您可以使用itertools.groupby进行分组,min查找最小值:

output= [('inputData_4', 'targetData_1', 0.09739792547374054),
         ('inputData_4', 'targetData_1', 0.09739792718209167),
         ('inputData_4', 'targetData_1', 0.09739793368940086),
         ('inputData_2', 'targetData_1', 0.10266894735114324),
         ('inputData_2', 'targetData_1', 0.1026689508485586),
         ('inputData_2', 'targetData_1', 0.10873575415245394),
         ('inputData_3', 'targetData_1', 0.1464233452565107),
         ('inputData_3', 'targetData_1', 0.14642335418508975),
         ('inputData_3', 'targetData_1', 0.14642336077619336),
         ('inputData_1', 'targetData_1', 0.1561837827131314),
         ('inputData_1', 'targetData_1', 0.15618378709179737),
         ('inputData_1', 'targetData_1', 0.15618379092496212)]

# sort is sorted, group by input/target
import itertools

for key, group in itertools.groupby(output, key=lambda t: t[:2]):
    tmin = min(group, key=lambda t: t[2])
    print(tmin)

你得到:

('inputData_4', 'targetData_1', 0.09739792547374054)
('inputData_2', 'targetData_1', 0.10266894735114324)
('inputData_3', 'targetData_1', 0.1464233452565107)
('inputData_1', 'targetData_1', 0.1561837827131314)