排序字典键的子集

Jac*_*ack 1 python sorting

如何根据A的值对以下列表B进行排序,该列表是字典A的子集?

A = {1: 10, 2:20, 3: 15, 4: 1}
B = [1, 3, 4]
Run Code Online (Sandbox Code Playgroud)

我的解决方案应该是

B = [4, 1, 3]
Run Code Online (Sandbox Code Playgroud)

以来

A[4] < A[1] < A[3]
Run Code Online (Sandbox Code Playgroud)

raf*_*elc 6

使用A.getkey

A = {1: 10, 2:20, 3: 15, 4: 1}
B = [1, 3, 4]

>>> sorted(B, key=A.get)
[4, 1, 3]
Run Code Online (Sandbox Code Playgroud)

请注意,您可以将默认值设置为.get方法的参数,这样,如果您的dict中不存在给定的键,您可以自己设置位置(例如,最后一个位置或第一个位置).例如:

B = [1, 3, 4, 11]
>>> sorted(B, key=lambda k: A.get(k, -1))
[11, 4, 1, 3]

>>> sorted(B, key=lambda k: A.get(k, float('inf')))
[4, 1, 3, 11]
Run Code Online (Sandbox Code Playgroud)

或者,正如@jpp强调的那样,

>>> sorted(B, key=A.__getitem__)
Run Code Online (Sandbox Code Playgroud)

如果您希望KeyError在引用键不存在的情况下引发它.