0

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

所以我创建了一个字典(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])

任何意见,将不胜感激。

谢谢

4

2 回答 2

0

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

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

def sortFun(e):
    return e[0]

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

print(sort)

这会根据最低 x 坐标将子阵列的顺序更改为最高。用于.sort(reverse=True,key=sortFun)将子数组的顺序更改为从最高 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]])]
于 2019-03-04T20:31:36.817 回答
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])

参考:根据子列表中的第二个元素对列表进行排序

于 2019-03-04T21:21:49.657 回答