【问题标题】:Python: How to sort a dictionary of X and Y coordinates by ascending X coordinate value?Python:如何通过升序 X 坐标值对 X 和 Y 坐标字典进行排序?
【发布时间】:2018-05-15 02:19:54
【问题描述】:

我有以下字典,我想根据它们的 X 坐标以升序方式对其进行排序,以便我可以通过颜色排列(RGB 以不同的顺序)识别“信标”。我一直在尝试像列表一样对其进行排序,但效果不太好。在此先感谢:)

Beacon2 = {
    'r': [998.9282836914062, 367.3825378417969],
    'b': [985.82373046875, 339.2225646972656], 
    'g': [969.539794921875, 369.2041931152344]
}

对于这个特定的字典,预期的结果是

sortedBeacon = {
    'g': [969.539794921875, 369.2041931152344], 
    'b': [985.82373046875, 339.2225646972656],
    'r': [998.9282836914062, 367.3825378417969]
} 

【问题讨论】:

  • 字典未排序
  • 预期结果是什么?
  • 对于这个特定的字典,预期结果是sortedbeacon = {'g':[969.539794921875,369.2041931152344],'B':[985.82373046875,339.2225646972656],'r':[998.9282836914065]}
  • 字典被排序是一个实现细节,不应依赖。您应该改用OrderedDict,这样您就可以这样做了。

标签: python sorting dictionary


【解决方案1】:

如果您只想要这些值,请使用:

sorted(data.values())

如果您想要与排序值关联的键,请使用:

sorted(data, key=data.get)

键和值:

sorted(data.items(), key=lambda x:x[1])

礼貌:sort dict by value python

【讨论】:

  • sorted(data.values()) 将列表相互排序,而不是其中的值
【解决方案2】:

你可以试试这个:

from collections import OrderedDict

Beacon2 = {'r': [998.9282836914062, 367.3825378417969], 'b':
[985.82373046875, 339.2225646972656], 'g': [969.539794921875, 369.2041931152344]}

sorted_beacons = sorted(Beacon2.items(), key = lambda x: x[1][0])

>>> print(OrderedDict(sorted_beacons))
OrderedDict([('g', [969.539794921875, 369.2041931152344]), ('b', [985.82373046875, 339.2225646972656]), ('r', [998.9282836914062, 367.3825378417969])])

首先对来自Beacon2.items() 的元组列表进行排序,并在位于每个元组[1][0] 的X 坐标上应用排序键。

请注意,您需要将OrderedDict 包装到结果中以保留字典的顺序。

【讨论】:

  • 工作就像一个魅力!谢谢:)
  • @Kara 但这是列表中的降序。这是预期的吗?
  • 项目中的第一个值是升序的。列表本身正在下降
  • @cricket_007 我想要它们在这里的值,按 X 值递增保持相应的键
【解决方案3】:

Python 中的 sort() 方法通常用于列表和元组,而 sorted() 则更适用于字典等数据结构。

在这种情况下,使用简单的 lambda 函数可以帮助您得到想要的结果。

print(sorted(Beacon2.values(), key = lambda x: (x[0])) 

【讨论】:

    【解决方案4】:

    请注意,字典通常是不可排序的。您可以使用itemgetter 生成没有任何 lambdas 的内部排序:

    from operator import itemgetter
    sorted_d = sorted(d.items(), key=itemgetter(1))
    

    如果您真的想维护秩序,请将以上内容包装在OrderedDict

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2016-08-02
      • 2012-08-08
      • 2022-01-07
      • 2021-08-30
      • 1970-01-01
      • 2020-10-05
      相关资源
      最近更新 更多