3

我有一个列表和一本字典:

list1 = ["a", "b", "c", "d"]

dict1 = 
{
    "a": 4,
    "b": 3,
    "c": 5,
    "d": 9,
    "e": 2,
    "f": 8
}


我要做的是根据dict1中的对应值对list1进行排序。

对于上面的例子,我希望 list 变成["b", "a", "c", "d"],根据它们的值排序..

我知道它应该是这样的......

list2 = sorted(list1, key=dict1[x])

但我被困住了:((

任何帮助将不胜感激

4

4 回答 4

5

关键参数应该是一个函数。

例如,使用绑定方法dict.__getitem__dict.get

>>> list1 = ["a", "b", "c", "d"]
>>> dict1 = { "a": 4, "b": 3, "c": 5, "d": 9, "e": 2, "f": 8 }
>>> sorted(list1, key=dict1.__getitem__)
['b', 'a', 'c', 'd']
于 2013-11-13T03:40:29.630 回答
4

你超级接近。key接受一个函数;您需要从dict1a中包装检索值lambda(@falsetru 也指出):

>>> list2 = sorted(list1, key=lambda x: dict1[x])
>>> list2
 ['b', 'a', 'c', 'd']
于 2013-11-13T03:38:48.250 回答
0

我似乎已经被规范的解决方案打败了,所以这里有一个不同的策略

from operator import itemgetter
[k for (k, v) in sorted(dict1.items(), key=itemgetter(1)) if k in list1]
['b', 'a', 'c', 'd']
于 2013-11-13T04:00:08.570 回答
0

其他人建议的关键内容非常强大。

但是,我猜我的老前辈在想“为什么不把数据放在类实例列表中并提供__lt__和/或__cmp__?” IMO,它会更清楚。

于 2013-11-13T04:03:23.133 回答