如何在具有名称和值的列表中对列表进行排序?

2024-09-27 00:20:18 发布

您现在位置:Python中文网/ 问答频道 /正文

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

所以我创建了一本字典(集合.defaultdict(列表)。你知道吗

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,heading和一个空字段(目前)。列表如下所示:

[('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])

如有任何建议,将不胜感激。你知道吗

谢谢


Tags: andofinid列表forcursorrow
2条回答

您应该能够对数组项调用sort函数。你知道吗

您应该能够使用this作为引用,但对于您的问题,您可以:

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坐标更改为最低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]])]

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

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

相关问题 更多 >

    热门问题