Как отсортировать список в списке внутри списка Python с именами и значениями? - PullRequest
0 голосов
/ 04 марта 2019

Еще один вопрос по индексированию списка (этот вопрос мне немного сложен):

Поэтому я создаю словарь (collection.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 голосов
/ 05 марта 2019

Я не совсем уверен, что полностью понимаю данные, которые вы пытаетесь отсортировать, но если это что-то вроде

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])

Ссылка: Сортировка списка по второму элементу в подсписке

0 голосов
/ 04 марта 2019

Вы должны иметь возможность просто вызывать функцию sort для элемента массива.

Вы должны иметь возможность использовать this в качестве ссылки, но для вашей проблемы вы можете сделать:

def sortFun(e):
    return e[0]

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

print(sort)

Это меняет порядок ваших подмассивов, основываясь на самой низкой координате х, на самую высокую.Используйте .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]])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...