从输入列表中提取字段A,以对字段B进行排序

时间:2019-05-06 08:14:17

标签: python list

诚然,标题不是很吸引人。

输入:

input = [("baz", 3), ("bar", 2), ("foo", 1), ("qux", 4)]

获得最好的方法是什么?

["foo", "bar", "baz", "qux"]

例如,我可以将其实现为:

map(lambda x: x[0], sorted(input, key=lambda x: x[1]))

在同一数据集上迭代两次似乎很浪费。我想知道是否有更好的方法告诉排序函数在基于第二个字段进行排序时选择第一个字段(而不是整个记录)。

2 个答案:

答案 0 :(得分:4)

假设您的第一个元组元素是唯一的, 您可以将input处理为dict。不过,这种方法 仅当您的input首先是dict时有效 因为否则您将在dict构造函数中获得额外的迭代。

>>> input = dict([("baz", 3), ("bar", 2), ("foo", 1), ("qux", 4)])
>>> sorted(input, key=input.get)
['foo', 'bar', 'baz', 'qux']

答案 1 :(得分:1)

尝试一下:

[i[0] for i in sorted(input, key=lambda x:x[1])]