Получение значений x точек из подсписка в Python

У меня есть файл JSON, и он представляет собой вложенный список типа A. (Извините, это был словарь)

В координатах, где первый элемент (1.1) содержит координаты x, второй элемент (2.2) содержит координаты y, а третий элемент (3.3) содержит координаты z для точки. И еще 3 пункта, следующие за первым пунктом, — это точки списка площади здания. Итак, точка 4 в списке соответствует кривой контура здания при создании линий.

Во вторых данных, выделенных жирным шрифтом, есть 2 подсписка. Это означает, что данные о контуре здания имеют 2 полигона.

A = 

{
"type": "FeatureCollection",
"name": "PROJECT CRS TM 30",
"features": [

{ "type": "Feature", "properties": { "OBJECTID": 0, "ROOF_NUMBER": null, "STOREY": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 1.1, 2.2, 3.3 ], [ 4.4, 5.5,6.6 ], [ 7.7, 8.8, 9.9 ], [ 10.10, 11.11, 12.12 ] ] ] ] } },

{ "type": "Feature", "properties": { "OBJECTID": 2215889.0, "ROOF_NUMBER": null, "STOREY": 4 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13.13, 14.14, 15.15], [ 16.16, 17.17, 18.18 ], [ 19.19, 20.20, 21.21 ], **[ [ [ 22.22, 23.23, 24.24 ], [ 25.25, 26.26, 27.27 ], [ 28.28, 29.29, 30.30 ], [ 31.31, 32.32, 33.33 ] ] ] ] } }**,

]
}

Я хотел бы получить список, состоящий из значений x точек, и я хотел бы получить их, не меняя подсписок зданий. Например, Б:

B = [[[[1.1], [4.4], [7.7], [10.10]]],[[[13.13], [16.16], [19.19]],[[22.22], [25.25], [28.28], [31.31]]]]    

где каждый список представляет значение x точек. и каждая функция имеет свои собственные подсписки.

Я получаю список типа C, когда пишу этот код в программном обеспечении визуального программирования BIM.

get_data_values["features"]["geometry"]["coordinates"][0];

С= [[ 13.13, 14.14, 15.15], [ 16.16, 17.17, 18.18 ], [ 19.19, 20.20, 21.21 ] , **[ [ 22.22, 23.23, 24.24 ], [ 25.25, 26.26, ], [ 28,28 , 29.29, 30.30 ], [ 31.31, 32.32, 33.33 ] ] ** ]

После получения C я использовал приведенный ниже код, чтобы получить список B.


    def Extract(lst):
        second_items = []
        for sublst in lst:
            for secsublst in sublst:     
                for thirdsublst in secsublst:
                    second_item = []
                    for item in thirdsublst:
                        second_items.append(second_item)
                        if item:
                            second_item.append(item[1])
                                      
        return second_items

Итак, когда я пробую это, я получаю значения x для каждого объекта, но я понял, что в данных есть 9835 объектов, но в итоге я получаю только 84296 объектов.

Файл JSON имеет функцию 9835, что означает, что в нем находится информация о 9835 зданиях. А в некоторых объектах есть два разных полигона контура. [Получение значений x точек из подсписка в Python]

Число, которое я получаю, — 84296, когда я использую Extract Def. Это означает, что я получаю меньше зданий.

[Получение значений x точек из подсписка в Python] [Получение значений x точек из подсписка в Python]

Как я могу получить функцию 9835, например B? Я искал по форуму, но не смог решить свою проблему, так как я новичок.

Спасибо за ваше время и руководство.

Весь процесс выглядит так.

A — это не «вложенный список», а словарь. Пожалуйста, поделитесь кодом, который вы на самом деле используете. (т. е. с помощью чего вы вызываете Extract). Кроме того, имейте в виду, что идентификаторы, начинающиеся с заглавной буквы в Python, обычно рассматриваются как имена классов, но, похоже, вы хотите использовать их как имя функции, поэтому extract было бы лучше - хотя более описательное было бы еще лучше.
Grismar 09.04.2024 10:24

Спасибо, Грисмар! это словарь, и я сделаю выдержки меньшими заглавными буквами. Я еще раз отредактировал вопрос. На последней фотографии справа виден файл JSON. И когда я пишу в блоке кода get_data_values ​​и подсписок в скобках, я думаю, я получаю вложенный список. а затем я применил код слева и получил результаты в узле сценария Python, который показан посередине ниже.

ece 09.04.2024 10:58
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

def flatten_coords(el):
    if el == []:
        return el
    if isinstance(el[0], list):
        return [flatten_coords(el[0])] + flatten_coords(el[1:])
    return el[:1]


x_coords = []

for feature in A["features"]:
    x_coords.append(flatten_coords(feature["geometry"]["coordinates"]))

print(x_coords)

Выход:

[[[[[1.1], [4.4], [7.7], [10.1]]]], [[[[13.13], [16.16], [19.19], [[[22.22], [25.25], [28.28], [31.31]]]]]]]

Большое спасибо! Я пытаюсь сейчас. После этого я проверяю ответ.

ece 09.04.2024 11:04

Другие вопросы по теме