如何使用名称和值在列表Python中的列表中对列表进行排序?

时间:2019-03-04 20:05:04

标签: python list dictionary indexing

另一个列表索引问题(这对我来说有点棘手):

所以我创建了一个字典(collections.defaultdict(list)。

d = collections.defaultdict(list)
with arcpy.da.SearchCursor(fc, fields) as cursor :
    for roadname,x,y,bearing,e_id in cursor:
        d[roadname].append([x,y,bearing,e_id])

从这个词典中,我将一些数据添加到列表中。它具有多个级别。

for row in d.items():
    #print(row[0][:])  # Name of the streets
    #print(row[1][:])  # List of values : x,y,heading and e_id
    #print(row[1][0][2])#Heading

#East heading
    if 45 <= row[1][0][2] <= 135:
        east_heading.append(row)
        print(str(row[0][:] + ' ==> Heading : East'))

列表中的第一个信息是街道名称。在此列表中,还有一个列表,其中包含多个信息(x,y,标题和一个空字段(目前)。该列表如下所示:

[('Adams_Street', [[-73.5073589207775, 45.38858418960871, 50.4474983215332, ''], [-73.50783911468335, 45.38868216265172, 50.4474983215332, ''], ('Archie_Street', [[-73.50561268197964, 45.38481501040445, 75.03119659423828, '']]) and so on...

每个子列表(街道名称)的长度互不相同。

我正在尝试按X坐标对列表进行排序(例如:-73.5056 ...)。我可以通过此循环访问所有值,但是我不知道如何对其进行排序:

for entries in east_heading:
print(entries[1][0][0])

任何建议将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:0)

您应该能够只调用数组项上的sort函数。

您应该可以使用this作为参考,但是对于您的问题,您可以这样做:

def sortFun(e):
    return e[0]

for entries in east_heading:
    entries[1].sort(key=sortFun)

print(sort)

这将根据最低x坐标到最高x坐标更改子数组的顺序。使用.sort(reverse=True,key=sortFun)将子数组的顺序从最高x坐标更改为最低x坐标。

例如,如果我为您的数据结构制作了可用的副本

east_heading = [('tuple_a', [[4, 5, 7], [1, 2, 3]]),('tuple_b', [[7, 8, 9], [6, 19, 20]])]

然后使用上面设置的过程将产生此输出

[('tuple_a', [[1, 2, 3],[4, 5, 7]]),('tuple_b', [[6, 19, 20],[7, 8, 9]])]

答案 1 :(得分:0)

我不太确定我是否完全理解您要排序的数据,但是如果是这样的话

l = [('Archie_Street', [[-73.50561268197964, 45.38481501040445, 75.03119659423828, '']]), ('Adams_Street', [[-73.5073589207775, 45.38858418960871, 50.4474983215332, ''], [-73.50783911468335, 45.38868216265172, 50.4474983215332, '']])]

,而您想按entry[1][0][0]进行排序,那么我知道的最简单的方法是:

l_sorted = sorted(l, key = lambda x: x[1][0][0])

参考:Sort a list according to the second element in sublist