给出以下格式的列表和字典:
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])
错误是什么?或者还有其他更好的方法来对其进行排序吗?
谢谢你告诉我。
答案 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']
注意:请勿命名变量dict
和list
,否则当您尝试拨打built-in functions list和dict时,您可能会感到惊讶:
>>> list=[1,2,3]
>>> list('abc')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable