另一个列表索引问题(这对我来说有点棘手):
所以我创建了一个字典(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])
任何建议将不胜感激。
谢谢
答案 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])