0

我对python很陌生,我很抱歉这已经得到了回答。我可以看到很多以前对“排序”问题的答案,但我的问题似乎与这些问题和答案有点不同。

我有一个键列表,每个键都包含在一个元组中,我正在尝试对其进行排序。每个键都派生自 CSV 文件中的列的子集,但该子集由用户在运行时确定,不能硬编码,因为它会因执行而异。我还有一个日期时间值,它将始终作为元组中的最后一项构成键的一部分(因此至少有一个要排序的项目 - 即使用户没有提供其他项目)。

要排序的元组如下所示:

(col0, col1, .... colN, datetime)

其中 col0 到 colN 是基于在 CSV 文件中的列中找到的值,并且“N”可以从运行到运行更改。

在每次执行中,列表中的元组将始终在每个元组中具有相同数量的项目。但是,它们需要能够根据用户输入在每次运行中有所不同。

排序看起来像:

sorted(concurrencydict.keys(), key=itemgetter(0, 1, 2))

...当我根据前三列对排序进行硬编码时。问题是我在执行之前不知道需要对 3 个项目进行排序 - 它可能是 1、2、3 或更多。

我希望这个描述是有道理的。

我一直无法想到如何让 itemgetter 接受可变数量的值。

有谁知道是否有一种优雅的方式来执行基于 python 中可变数量的项目的排序,其中排序项目的数量是在运行时确定的(而不是基于固定的列号或属性名称)?

4

1 回答 1

0

我想我会把我的评论变成答案。

您可以通过*args在函数调用中使用来传递可变数量的参数(它们被打包到一个可迭代对象中)。在您的特定情况下,您可以将用户提供的列号选择放入sort_columns列表或元组中,然后调用:

sorted_keys = sorted(concurrencydict.keys(), key=itemgetter(*sort_columns))
于 2013-09-29T21:30:04.657 回答