诚然,标题不是很吸引人。
输入:
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]))
在同一数据集上迭代两次似乎很浪费。我想知道是否有更好的方法告诉排序函数在基于第二个字段进行排序时选择第一个字段(而不是整个记录)。
答案 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])]