【问题标题】:Ascending order sorting in list of dictdict列表中的升序排序
【发布时间】:2017-12-14 17:54:55
【问题描述】:

如何在没有键匹配的情况下按升序对列表进行排序?

每个键都是唯一的,需要排序键。

输入:

[{23: (1, 5)}, 
{59: (2, 3)}, 
{45: (2, 9)}, 
{28: (3, 6)}]

输出应该是这样的(基于dict的键排序):

[{23: (1, 5)}, 
{28: (3, 6)},
{45: (2, 9)},
{59: (2, 3)}]

【问题讨论】:

  • 你知道字典通常有多个键,对吧?
  • 我不明白你的问题。你想说什么@ScottHunter
  • 你为什么不把你的数据像{23: (1, 5), 59: (2, 3)}等等。排序可以在之后进行,如果你需要一个类似字典的结构,可以使用OrderedDict
  • @MuhammadHaseebKhan 在这种情况下,你为什么要使用字典?这整个问题没有意义。
  • 他们希望通过改变数据结构来解决这个问题。

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


【解决方案1】:

如果您的字典总是只有一个键,那么在 Python 2.x 中:

print sorted([{23: (1, 5)}, {59: (2, 3)}, {45: (2, 9)}, {28: (3, 6)}])

愿意:

[{23: (1, 5)}, {28: (3, 6)}, {45: (2, 9)}, {59: (2, 3)}]

默认情况下,在 Python 2.x 中使用 sorted() 会生成正确排序的列表。

对于 Python 3.x:

print(sorted([{23: (1, 5)}, {59: (2, 3)}, {45: (2, 9)}, {28: (3, 6)}], key=lambda x: next(iter(x))))

这使用 lambda 函数从字典中提取第一个(也是唯一一个)键并将其用作排序键。

【讨论】:

  • 这只适用于 Python 2,因为 dict_keys 不能在 Python 3 中被索引。
  • 我正在使用 python 3,你能详细说明你的答案吗?
  • 在 Python 2 中,我认为你根本不需要 key 参数(除非我记错了它是如何对字典列表进行排序的)
  • 不需要创建列表,你可以使用类似:lambda x: next(iter(x))
  • 感谢您的建议,已相应更新。
猜你喜欢
  • 2021-09-29
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多