如何根据字典值对列表进行排序?

时间:2014-05-24 00:05:54

标签: python sorting dictionary lambda

给出以下格式的列表和字典:

l = ["2D", "5H", "8S", "JC", "3H", "4S", "8C", "AD"]

d = {"3":1,  "4":2,  "5":3, "6":4, "7":5,
     "8":6,  "9":7,  "0":8, "J":9, "Q":10,
     "K":11, "A":12, "2":13}

如何根据字典中的值对列表进行排序? 我尝试使用带有sorted函数的lambda对其进行排序:

sorted(l, key=lambda x: d[x])

错误是什么?或者还有其他更好的方法来对其进行排序吗?

谢谢你告诉我。

1 个答案:

答案 0 :(得分:2)

说明显而易见,列表中没有任何元素是字典中的键。

也许你只想使用list元素的第一个字母?如果是这样,你可以这样做:

>>> li = ["2D","5H","8S", "JC", "3H", "4S", "8C", "AD"]
>>> di = {"3":1, "4":2, "5":3, "6":4, "7":5, "8":6, "9":7, "0":8, "J":9, "Q":10, "K":11, "A":12, "2":13}
>>> sorted(li, key=lambda k: di[k[0]])
['3H', '4S', '5H', '8S', '8C', 'JC', 'AD', '2D']

如果dict中可能没有该密钥,您可以使用{}.get()提供默认权重:

>>> sorted(li, key=lambda k: di.get(k[0], 0))
['3H', '4S', '5H', '8S', '8C', 'JC', 'AD', '2D']

注意:请勿命名变量dictlist,否则当您尝试拨打built-in functions listdict时,您可能会感到惊讶:

>>> list=[1,2,3]
>>> list('abc')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable