【问题标题】:Creating a "top list" from dictionary [duplicate]从字典中创建“顶级列表”[重复]
【发布时间】:2018-09-09 08:09:17
【问题描述】:

我有字典,比如:

x = {"John":15,"Josh":2,"Emily":50,"Joey":12}

我需要创建这样的东西:

  1. 艾米丽 - 50
  2. 约翰 - 15
  3. 乔伊 - 12
  4. 乔什 - 2

最好的方法是什么?我已经尝试以某种方式对字典进行排序,但随后它转换为列表,我无法同时获得两个值(名称和数字)。

【问题讨论】:

  • 你可以使用sorted(x)

标签: python dictionary converter


【解决方案1】:

通过字典值进行简单排序:

x = {"John":15, "Josh":2, "Emily":50, "Joey":12}

for i, t in enumerate(sorted(x.items(), key=lambda x: x[1], reverse=True), 1):
    print('{}. {} - {}'.format(i, t[0], t[1]))

输出:

1. Emily - 50
2. John - 15
3. Joey - 12
4. Josh - 2

【讨论】:

  • 谢谢,最后一个问题,如何将其限制在前 3 名?
  • @Arbys,欢迎,只需在 print 语句之后添加 if i == 3: break 作为下一行
【解决方案2】:

在此处查看答案:How do I sort a dictionary by value?

在您的情况下,您需要先反转 sorted_x,因为您需要更高的值,所以:

import operator


x = {"John":15,"Josh":2,"Emily":50,"Joey":12}
sorted_x = sorted(x.items(), key=operator.itemgetter(1), reverse=True)

【讨论】:

    【解决方案3】:

    一个简单的方法:

    x = {"John":15,"Josh":2,"Emily":50,"Joey":12}
    
    val = sorted([y for y in x.values()])
    name = val[:]
    for key in x.keys():
        id = val.index(x[key])
        name[id] = key
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 2019-03-27
      • 2019-02-21
      • 2019-09-25
      • 2021-06-25
      相关资源
      最近更新 更多