Python按键值对字典的键排序

3

我一直在尝试对具有以下格式的键进行排序: "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

我如何避免仅使用最高有效数字进行排序?

2个回答

7
您正在对字符串进行排序,因此它们是按字典顺序而不是数字顺序排序的。
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 前面。


0

也许这可以帮助

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接