【问题标题】:How to sort a list based on dictionary values?如何根据字典值对列表进行排序?
【发布时间】:2014-07-13 10:43:19
【问题描述】:

给定一个列表和一个字典,格式如下:

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}

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

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

什么是错误?或者还有其他更好的排序方式吗?

谢谢你告诉我。

【问题讨论】:

  • 不要将其命名为列表...但是您的示例应该满足您的要求...
  • 请注意,sorted 不会对列表进行就地排序,它会返回已排序的列表的新副本...result = sorted(...)。请参阅bytes.com/topic/python/answers/803447-sorted-sort 了解更多信息
  • 列表中的元素["2D","5H",...] 不在您的字典中。你会得到关键错误。
  • 是的,我遇到了一个关键错误。那么如何解决呢?

标签: python sorting dictionary lambda


【解决方案1】:

很明显,列表中的所有元素都不是字典中的键。

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

>>> 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']

如果字典中可能不存在密钥,您可以使用{}.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

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多