首页 > 解决方案 > 从输入列表中提取字段 A 以在字段 B 上排序

问题描述

诚然,这不是一个非常吸引人的标题。

给定输入:

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]))

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

标签: pythonlist

解决方案


如果您的第一个元组元素是唯一的,您可以处理您的inputas dict。不过,此方法仅在您首先input是 a时才有效dict,否则您会在构造函数中获得额外的迭代dict

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

推荐阅读