【问题标题】:Python order a dict by key valuePython按键值排序字典
【发布时间】:2015-08-16 14:23:15
【问题描述】:

我一直在尝试订购具有以下格式的键的字典:"0:0:0:0:0:x" 其中 x 是在填充字典时递增的变量。

由于字典没有按顺序插入,而且我需要按顺序显示键值值,所以我尝试使用

collections.OrderedDict(sorted(observation_values.items())

observation_values 是我的字典,但值是按照第一个数字排序的,如下所示:

"0:0:0:0:0:0": [0.0], "0:0:0:0:0:1": [0.0], "0:0:0:0:0:10": [279.5],
"0:0:0:0:0:100": [1137.8], "0:0:0:0:0:101": [1159.4], "0:0:0:0:0:102":
[1180.3], "0:0:0:0:0:103": [1193.6]...

直到"0:0:0:0:0:109",然后回到"0:0:0:0:0:11",然后再回到"0:0:0:0:0:110"..:111..:112

如何避免只使用最重要的数字进行排序?

【问题讨论】:

    标签: python sorting dictionary


    【解决方案1】:

    您正在对字符串进行排序,因此它们是按字典顺序排序的,而不是按数字排序的。

    sorted()一个自定义排序键:

    sortkey = lambda i: [int(e) for e in i[0].split(':')]
    collections.OrderedDict(sorted(observation_values.items(), key=sortkey))
    

    这将获取每个键值对 (i[0]) 的键,将其拆分为 : 冒号并将该键中的每个数字转换为整数。现在,键将按字典顺序按部分排序,并按部分按数字排序;现在0:0:0:0:0:1 排在0:0:0:0:0:100 之前,并且都排在0:0:0:0:1:0 之前。

    【讨论】:

      【解决方案2】:

      可能是这个帮助

      >>>sorted(observation_values.items(),key=lambda x: int(x[0].split(":")[-1]))
      

      【讨论】:

        猜你喜欢
        • 2015-01-04
        • 2015-10-10
        • 1970-01-01
        • 1970-01-01
        • 2017-05-30
        • 1970-01-01
        • 2021-05-01
        • 2011-01-25
        • 2014-01-18
        相关资源
        最近更新 更多