【问题标题】:how to sort a dictionary with lists of multiple numeric values?如何对包含多个数值列表的字典进行排序?
【发布时间】:2018-05-25 09:56:58
【问题描述】:

我有一个字典,数据结构如下:

d = {'TRANSFERRED': [2281, 1031, 1775, 867, 1242],
     'CLOSED':      [239, 269, 645, 540, 388], 
     'DEFERRED':    [89, 5, 68, 48, 37],
     'OPEN':        [3, 0, 2, 1, 0],
     'IN PROGRESS': [0, 2, 4, 0, 5],
     'QUEUED':      [0, 0, 0, 0, 0]}

字典包含带有数值的列表,我想将它们从最低到最高排序,如下所示:

d = {'TRANSFERRED': [867, 1031, 1242, 1775, 2281],
     'CLOSED':      [239, 269, 388, 540, 645], 
     'DEFERRED':    [5, 37, 48, 68, 89],
     'OPEN':        [0, 0, 1, 2, 3],
     'IN PROGRESS': [0, 0, 2, 4, 5],
     'QUEUED':      [0, 0, 0, 0, 0]}

我担心字典无法排序,因为它们本质上是无序的,但其他类型(如列表和元组)不是无序的,此外,我一直在使用以下技巧对包含单个项目的字典进行排序,例如:

d2 = {'TRANSFERRED': [-2281],
      'CLOSED':      [239], 
      'DEFERRED':    [489],
      'OPEN':        [34],
      'IN PROGRESS': [0],
      'QUEUED':      [-10]}
sorted(d2.items(), key=lambda x: x[1], reverse=True)

结果给出如下排序的数据结构:

[('DEFERRED', [489]), 
 ('CLOSED', [239]), 
 ('OPEN', [34]), 
 ('IN PROGRESS', [0]), 
 ('QUEUED', [-10]), 
 ('TRANSFERRED', [-2281])]

我想复制同样的结果,但要使用包含多个数值列表的字典。我怎样才能做到这一点?请随时使用以下链接repl.it - sort dictionary with lists of multiple items 来测试您的结果。欢迎提供反馈或 cmets 以改进此问题。

【问题讨论】:

    标签: python python-3.x list sorting dictionary


    【解决方案1】:

    你可以使用dict.items():

    d = {'TRANSFERRED': [2281, 1031, 1775, 867, 1242],
     'CLOSED':      [239, 269, 645, 540, 388], 
     'DEFERRED':    [89, 5, 68, 48, 37],
     'OPEN':        [3, 0, 2, 1, 0],
     'IN PROGRESS': [0, 2, 4, 0, 5],
     'QUEUED':      [0, 0, 0, 0, 0]}
    new_d = {a:sorted(b) for a, b in d.items()}
    

    输出:

    {'IN PROGRESS': [0, 0, 2, 4, 5], 'TRANSFERRED': [867, 1031, 1242, 1775, 2281], 'DEFERRED': [5, 37, 48, 68, 89], 'CLOSED': [239, 269, 388, 540, 645], 'OPEN': [0, 0, 1, 2, 3], 'QUEUED': [0, 0, 0, 0, 0]}
    

    【讨论】:

    • 总是这么快,只需输入相同的解决方案!
    【解决方案2】:
    d = {
         'TRANSFERRED':2281,
         'CLOSED':239, 
         'DEFERRED':89,
         'OPEN':3,
         'IN PROGRESS':2,
         'QUEUED':0
    }
    
    # Some usefull method of dictionary
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    #
    #
    # To get dict keys:
    # ----------------
    #
    # d.keys() = > dict_keys(['TRANSFERRED', 'CLOSED', 'DEFERRED', 'OPEN', 'IN PROGRESS', 'QUEUED'])
    # The output is an iterable.
    #
    # To get dict values
    #-------------------
    #
    # d.values() => dict_values([2281, 239, 89, 3, 2, 0])
    # The out is an iterable.
    #
    # To get both key and values
    # --------------------------
    #
    # d.items() => dict_items([('TRANSFERRED', 2281), ('CLOSED', 239), ('DEFERRED', 89), ('OPEN', 3),
    # ('IN PROGRESS', 2), ('QUEUED', 0)])
    # The out is iterable of tuples. Each tuple contains key as the first tuple item and value as
    # second item. (k,v)
    

    【讨论】:

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