【问题标题】:Sort Python Dictionary by first four characters in Key按 Key 中的前四个字符对 Python 字典进行排序
【发布时间】:2014-03-27 22:20:35
【问题描述】:

我有一个如下所示的 python 字典:

{'666 -> 999': 4388, '4000 -> 4332': 4383, '1333 -> 1665': 7998, '5666 -> 5999': 4495, '3666 -> 3999': 6267, '3000 -> 3332': 9753, '6333 -> 6665': 7966, '0 -> 332': 877}

键显然都是字符串,但每个键都描述了一个数字范围。我想做的是根据键中的第一个数字对该字典进行排序。有没有一种快速的方法呢?仅在字典上使用 sorted 并没有帮助,因为字符串“666”在词法上大于字符串“1000”。感谢您的任何建议

【问题讨论】:

  • 字典没有排序;你的意思是你想要一个 just 键的排序列表吗?您希望键按数字方式排序?
  • 为什么是前四个?你真的想在'0 ->' 上对'0 -> 332' 进行排序吗?
  • 如果其中一个键是 '33333 -> 10' 怎么办?您将使用所有 3 或仅使用前 4 个。
  • 啊好点roippi。我将编辑问题。

标签: python sorting dictionary


【解决方案1】:

使用排序键:

sorted(yourdict, key=lambda k: int(k.split()[0]))

这会返回一个 keys 的列表,在 key 的第一部分按数字排序(按空格分割)。

演示:

>>> yourdict = {'666 -> 999': 4388, '4000 -> 4332': 4383, '1333 -> 1665': 7998, '5666 -> 5999': 4495, '3666 -> 3999': 6267, '3000 -> 3332': 9753, '6333 -> 6665': 7966, '0 -> 332': 877}
>>> sorted(yourdict, key=lambda k: int(k.split()[0]))
['0 -> 332', '666 -> 999', '1333 -> 1665', '3000 -> 3332', '3666 -> 3999', '4000 -> 4332', '5666 -> 5999', '6333 -> 6665']

将键和值排序在一起:

sorted(yourdict.items(), key=lambda item: int(item[0].split()[0]))

这会产生键值对:

>>> sorted(yourdict.items(), key=lambda item: int(item[0].split()[0]))
[('0 -> 332', 877), ('666 -> 999', 4388), ('1333 -> 1665', 7998), ('3000 -> 3332', 9753), ('3666 -> 3999', 6267), ('4000 -> 4332', 4383), ('5666 -> 5999', 4495), ('6333 -> 6665', 7966)]

您可以使用它生成collections.OrderedDict() object

>>> from collections import OrderedDict
>>> OrderedDict(sorted(yourdict.items(), key=lambda item: int(item[0].split()[0])))
OrderedDict([('0 -> 332', 877), ('666 -> 999', 4388), ('1333 -> 1665', 7998), ('3000 -> 3332', 9753), ('3666 -> 3999', 6267), ('4000 -> 4332', 4383), ('5666 -> 5999', 4495), ('6333 -> 6665', 7966)])

【讨论】:

  • 太棒了!你打败了我。
  • 有没有办法做到这一点,但保留字典?我的最终目标是按顺序打印键/值对。感谢您的帮助
  • 哇!那太好了!非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 2011-01-18
  • 1970-01-01
  • 2016-03-23
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多