【问题标题】:How to order a dictionary by its values without changing it to a list of tuples如何按字典的值对字典进行排序而不将其更改为元组列表
【发布时间】:2018-09-20 17:43:03
【问题描述】:

我目前正在为我的机器人团队开发一个程序,该程序会打印出一个团队密钥(一个字符串)和一个对其好坏进行排名的值。所以我当前的输出是一个以团队键为键、值作为值的字典。但是字典没有排序。我已经读到您可以将其更改为我尝试并工作过的元组列表,但我只有 1 个问题。目前,团队密钥在团队编号前有“frc”,我通过执行 [3:] 将其删除。但是,当我对元组列表执行相同操作时,它不起作用。所以我想知道是否有一种方法可以按字典的值对字典进行排序而不将其更改为元组列表?

【问题讨论】:

  • 你能用例子分解问题吗?
  • 如果您确实有对字符串的引用,那么使用[3:] 进行切片也可以。我猜你没有打开 tuples 的包装,所以你试图切错东西。
  • 您拒绝 OrderedDict 吗? (docs.python.org/3/library/…)

标签: python


【解决方案1】:

您可以在排序后将项目添加到有序字典中:https://docs.python.org/2/library/collections.html#collections.OrderedDict

但是如果你想使用一个元组,改变一个值是行不通的,因为它们是不可变的。但是,您可以在创建它之前进行切片。

(此处最佳答案的扩展:Python 3 sort a dict by its values

s = [(k[3:], d[k]) for k in sorted(d, key=d.get, reverse=True)]

【讨论】:

    【解决方案2】:
    mydict = {'frc1':40,'frc2':2,'frc3':1,'frc4':3}
    
    for key, value in sorted(mydict.iteritems(), key=lambda (k,v): (k[3:], v)):
        print "%s: %s" % (key, value)
    

    输出:

    frc1: 40  
    frc2: 2  
    frc3: 1  
    frc4: 3 
    

    如果我正确理解了您的问题,这应该可行:)

    lambda functions很神奇

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 2010-09-09
      • 2019-07-19
      相关资源
      最近更新 更多