Вопрос:

Присоединение к вложенному списку

python nested-lists

25231 просмотра

4 ответа

147 Репутация автора

Я использую вложенный список для поиска значений в словаре, который я создал. Затем я хочу добавить найденные значения в список. Проблема, которую я не знаю, как кодировать, состоит в том, как сохранить значения в той же структуре вложенного списка? Вот код, где в последней строке я добавляю значения в пустой список.

#Creating a dictionary of FID: LU_Codes from external txt file
import sys, arcpy, string, csv

text_file = open("H:\SWAT\NC\FID_Whole.txt", "r")
Lines = text_file.readlines()
text_file.close()

FID_LU = map(string.split, Lines)
#print FID_LU
FID_GC_dict = dict(FID_LU)

Neighbors_file = open("H:\SWAT\NC\Sh_Neighbors2.txt","r")
Entries = Neighbors_file.readlines()
Neighbors_file.close()

Neighbors_List = map(string.split, Entries)

print Neighbors_List

#FID = [x[0] for x in Neighbors_List]
#print FID

gridList = []
for list in Neighbors_List:
    for item in list:
       #print FID_GC_dict[item]
       gridList.append(int(FID_GC_dict[item]))


 print gridList

Вот вывод для списка соседей (правильный):

[['0', '1', '11', '12', '13'], ['1', '0', '2', '12', '13', '14'], ['2', '1', '3', '13', '14', '15'], ['3', '2', '4', '14', '15', '16'], ['4', '3', '5', '15', '16', '17'], ['5', '4', '6', '16', '17', '18'], ['6', '5', '7', '17', '18', '19'], ['7', '6', '8', '18', '19', '20'], ['8', '7', '9', '19', '20', '21'], ['9', '8', '20', '21', '22'], ['10', '11']]

Вот вывод для gridList (неверно):

[3, 3, 4, 4, 4, 3, 3, 3, 4, 4, 4, 3, 3, 3, 4, 4, 2, 3, 3, 3, 4, 2, 2, 3, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4]

Я хотел бы, чтобы gridList выглядел так:

[[3, 3, 4, 4, 4], [3, 3, 3, 4, 4, 4], [3, 3, 3, 4, 4, 2], [3, 3, 3, 4, 2, 2], [3, 3, 3, 2, 2, 2], [3, 3, 3, 2, 2, 3], [3, 3, 3, 2, 3, 3], [3, 3, 3, 3, 3, 3], [3, 3, 3, 3, 3, 3], [3, 3, 3, 3, 3], [3, 4]]

Любая помощь будет оценена. Я новичок в Python ... чтение сообщений помогает, но я борюсь с этим.

Спасибо!

Автор: Linda Источник Размещён: 14.02.2012 10:52

Ответы (4)


3 плюса

574214 Репутация автора

Решение

Составьте временный список row. Добавьте элементы из внутреннего цикла в row, а затем во внешний цикл добавьте строку в gridList:

gridList = []
for nlist in Neighbors_List:
    row = []
    for item in nlist:
       row.append(int(FID_GC_dict[item]))
    gridList.append(row)

Обратите внимание, что вы могли бы также использовать понимание списка здесь:

gridList = [[int(FID_GC_dict[item]) for item in nlist] 
            for nlist in Neighbors_List]

PS. Лучше не называть переменную list, поскольку она скрывает встроенный тип с тем же именем.

Автор: unutbu Размещён: 14.02.2012 10:58

0 плюса

3107 Репутация автора

gridList = [int(FID_GC_dict[item]) for item in l for l in Neighbors_List]

Понимание списка Python потрясающее. Изучи их, люби их. (обратите внимание, это возвращает список кортежей, если вы хотите список списков, вы можете вкладывать понимания.

Кроме того, не используйте listв качестве имени переменной, так как это конфликтует со встроенным списком

Автор: ironchefpython Размещён: 14.02.2012 10:58

1 плюс

3667 Репутация автора

Вы добавляете в один список. Попробуй это

gridList = []
for list in Neighbors_List:
    temp = []
    for item in list:
       #print FID_GC_dict[item]
       temp.append(int(FID_GC_dict[item]))
    gridList.append(temp)
Автор: Jeff Размещён: 14.02.2012 10:59

0 плюса

98 Репутация автора

Используя один список:

_list = []; outer_len = 5; inner_len = 10

for outer_idx in range(outer_len):
    _list.append([])
    for inner_idx in range(inner_len):
        _list[outer_idx].append(#stuff)
Автор: OverLordGoldDragon Размещён: 12.06.2019 09:11
Вопросы из категории :
32x32