![](/img/trans.png)
[英]Pythonic way to sort list of objects by a dict value (by key) contained within the object
[英]how to sort a list that is contained in an object
任务是使用以下代码作为起点编写排序算法。 问题是我似乎无法弄清楚我是如何启动代码的 go,我不是在寻找完整的解决方案 - 只是如何对实际上是 object 一部分的元组列表进行排序的技术。 当我尝试遍历列表时出现错误,说无法遍历 object。
class LinkedList:
def __init__(self, data):
self.label = data[0][0]
self.value = data[0][1]
self.tail = None if (len(data) == 1) else LinkedList(data[1:])
countries = LinkedList([("Ukraine",41879904),("Brunei",442400),("Christmas Island (Australia)",1928)
您可以使用指针来遍历链表。:
curr = countries
while curr:
print("Label {}, Value {}".format(curr.label, curr.value))
curr = curr.tail
为了对链表进行排序,首先,您需要实现帮助函数来删除/插入节点到某个 position 的给定链表。 一旦你有了这样的方法,你就可以使用你刚刚创建的辅助方法来实现任何著名的排序算法(例如快速排序)。
要遍历此列表,您需要继续获取 object 的尾部引用:
class LinkedList:
def __init__(self, data):
self.label = data[0][0]
self.value = data[0][1]
self.tail = None if (len(data) == 1) else LinkedList(data[1:])
countries = LinkedList([("Ukraine",41879904),("Brunei",442400),("Christmas Island (Australia)",1928)])
nextObj = countries
while nextObj is not None:
print(nextObj.label, nextObj.value)
nextObj = nextObj.tail
print("done!")
output:
Ukraine 41879904
Brunei 442400
Christmas Island (Australia) 1928
done!
要获取某个索引处的元素,您从第一个元素开始迭代并保留一个计数器。
功能工具,@total_ordering
python 中的强大功能之一。 您可以以经典且简单的方式对对象进行排序。 python 中的 Functools 模块有助于实现高阶功能。 高阶函数是调用其他函数的依赖函数。 Total_ordering 提供了丰富的 class 比较方法,有助于比较类,而无需为其显式定义 function。 因此,它有助于代码的冗余。
实施这些比较方法有两个基本条件
必须从lt
(小于)、le(小于或等于)、gt(大于)或ge(大于或等于)中定义至少一种比较方法。
还必须定义eq
function
from functools import total_ordering
@total_ordering
class LinkedList(object):
def __init__(self, data):
self.label = data[0][0]
self.value = data[0][1]
def __lt__(self, other):
return self.label < other.value ##lets assume that the sort is based on label data member(attribute)
def __eq__(self, other):
return self.label == other.value
##I dont know what data is. just pass your data objects to list of LinkedList objects. and sort it with sorted method (treat them like int objects)!
my_list = [LinkedList(data0),LinkedList(data1),LinkedList(data2)]
new_list=my_list.sorted()
for obj in new_list:
print(...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.