【问题标题】:Sorting Dictionary in python with the given Dict Format使用给定的字典格式在python中对字典进行排序
【发布时间】:2017-06-30 09:25:28
【问题描述】:

我想从

转换我的字典
 results = {"r3":ab,"r1":ac,"r9":ab,"r12":ad,"r19":ae,"r11":ar,"r2":af,"r21":aa,
            "r31":a,"r99":ad,"r111":af,"r116":af,"r211":ar,"r221":aq,}

{"r1":ac,"r2":af,"r3":ab,"r9":ab,"r11":ar,"r12":ad,"r19":ae,"r21":aa,
     "r31":a,"r99":ad, "r111":af,"r116":af,"r211":ar,"r221":aq,}

我试过了

json_data = json.dumps(results, sort_keys = True)

(sorted(results.items(),reverse=False)) but not getting desired output

帮我直接获取正确排序

【问题讨论】:

标签: python sorting dictionary


【解决方案1】:

您是否正在寻找这样的东西:

keysLessR = [int(item[1:]) for item in results.keys()]
keysLessR

[12, 11, 19, 31, 21, 211, 1, 2, 3, 9, 221, 99, 111, 116]
keysLessR.sort()

[1, 2, 3, 9, 11, 12, 19, 21, 31, 99, 111, 116, 211, 221]
orderedKeys = ['r'+str(item) for item in keysLessR]

orderedKeys
['r1', 'r2', 'r3', 'r9', 'r11', 'r12', 'r19', 'r21', 'r31', 'r99', 'r111', 'r116', 'r211', 'r221']

for item in orderedKeys:
  print item + ":" + results[item]    # for example

【讨论】:

    【解决方案2】:

    元组列表比OrderedDict 更有效:

    results = {"r3":'ab',"r1":'ac',"r9":'ab',"r12":'ad',"r19":'ae',"r11":'ar',"r2":'af'}
    results = sorted(results.items(), key=lambda x: int(x[0].translate(None, 'r')))
    #[('r1', 'ac'), ('r2', 'af'), ('r3', 'ab'), ('r9', 'ab'), ('r11', 'ar'), ('r12', 'ad'), ('r19', 'ae')]
    

    【讨论】:

    • 你测试过这个答案吗?
    • 这里真的需要key 属性吗?将其保留以对键和值进行排序,或将其设置为 lambda x: x[0] 仅用于对键进行排序。翻译的东西在这里抛出一个TypeError
    • 我测试了答案,如果排除键,结果将是[('r1', 'ac'), ('r11', 'ar'), ('r12', 'ad')...,因为strint 有不同的排序规则。
    【解决方案3】:
        from collections import OrderedDict
        print(OrderedDict(sorted(dict.items(), key= lambda k: int(k[0][1:])))) 
    

    或更多细节:

        dict = {"r3":'ab',"r1":'ac',"r9":'ab',"r12":'ad',"r19":'ae',"r11":'ar',"r2":'af',"r21":'aa',"r31":'a',"r99":'ad',"r111":'af',"r116":'af',"r211":'ar',"r221":'aq'}
        sort_keys = sorted(dict, key=lambda k: (k[0], int(k[1:])))
        res_dic = OrderedDict()
        for k in sort_keys:
            if k is not res_dic:
                res_dic[k] = dict[k]
        print(res_dic)
    

    OrderDictionary 用于维护我们正在创建的键的状态。

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 2012-05-05
      • 2021-04-17
      • 2018-10-19
      相关资源
      最近更新 更多