【问题标题】:Sorting a list with elements containing dictionary values使用包含字典值的元素对列表进行排序
【发布时间】:2012-05-13 06:47:24
【问题描述】:

我正在尝试创建一个带有卡片等级的排序系统,它们的值是从单独的字典中获得的。在一个简单的 52 张牌中,我们有 2 个 A 等级,在这种情况下,我想要一个等级系统,其中 0 是 10,J 是 11,Q 是 12,K 是 13,A 是 14,2 是 15,其中 2 是最大的价值排名。问题是,如果有一个列表,我想根据编号系统按 ASCENDING 顺序对排名卡进行排序,我该怎么做?

比如这里有一个列表[3,5,9,7,J,K,2,0],我想把这个列表排序成[3,5,7,9,0,J,K,2]。我还为编号系统制作了一个字典为{'A': 14, 'K': 13, 'J': 11, 'Q': 12, '0': 10, '2': 15}

谢谢

【问题讨论】:

  • 你目前有什么代码?

标签: python list sorting dictionary


【解决方案1】:

这个答案有效:

    sorted(list_for_sorting, key=dictionary_you_wrote.__getitem__)

这也是:

    sorted_list = sorted(unsorted_list, key = lambda k: your_dictionary[k])

sorted 函数使用第一个参数(要排序的对象)中的每个条目来调用第二个参数。这样 lamda 函数会从字典中返回给定项的值,并且 sorted 可以将其用作键。

如果任何列表条目不在 your_dictionary.keys() 中,这将不起作用。要么完成字典,要么使用

    sorted(unsorted_list, key = lambda k: your_dictionary[k] if k in your_dictionary.keys() else k)

【讨论】:

  • key=dictionary_you_wrote.get通常比较简洁
  • 等等...对于“your_dictionary”部分,这是获取数字值的字典吗?非常感谢!
  • 抱歉,这不起作用,因为存在 KeyError,因为数字 '3' 不是字典中的键。如果未排序列表中的元素不在字典中,我们如何排除它们?
  • 完成字典比从lamda函数中排除元素更好。
【解决方案2】:

你试过了吗

sorted(list_for_sorting, key=dictionary_you_wrote.__getitem__)

?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多