繁体   English   中英

Python:如何通过递增X坐标值来对X和Y坐标的字典进行排序?

[英]Python: How to sort a dictionary of X and Y coordinates by ascending X coordinate value?

我有以下字典,希望根据它们的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]
} 

请注意,字典通常无法排序。 您可以使用itemgetter生成排序后的内部函数,但不包含任何lambda:

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

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

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

在这种情况下,使用简单的lambda函数可以帮助您获得所需的内容。

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

如果只需要这些值,请使用以下命令:

sorted(data.values())

如果要与已排序的值关联的键,请使用以下命令:

sorted(data, key=data.get)

键和值:

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

礼貌: 按值python排序dict

您可以尝试以下方法:

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()中对元组列表进行排序的Beacon2.items() ,并在每个元组的[1][0]的X坐标上应用了排序键。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM