Python & Arrays: поиск и добавление недостающего элемента в массив - PullRequest
0 голосов
/ 12 апреля 2019

У меня грязный массив;каждый элемент имеет подэлементы, и каждый подэлемент имеет подэлементы.Мой массив:

myComplex=[[['03.04.2019', 'Jack', '7']], [['26.03.2019', 'Micheal', '5'], ['26.03.2019', 'Smith', '8']], [['01.04.2019', 'Jack', '11'], ['01.04.2019', 'Michelle', '2'], ['01.04.2019', 'George', '9']]]

Позвольте мне объяснить этот массив;

Субэлементы, начинающиеся с '03 .04.2019 ';['03.04.2019', 'Jack', '7']

Подэлементы, начинающиеся с '26 .03.2019 ';['26.03.2019', 'Micheal', '8'], ['26.03.2019', 'Smith', '5']

Подэлементы, начинающиеся с '01 .04.2019 ';['01.04.2019', 'Jack', '11'], ['01.04.2019', 'Michelle', '2'], ['01.04.2019', 'George', '9']

В myComplex выше, как вы видите, первым подэлементом каждого подэлемента является дата.Я хочу добавить недостающие даты между 01.04.2019 и 05.04.2019 (для этого списка 02.04.2019, 04.04.2019, 05.04.2019) субэлементами, подобными этому формату;

[['02.04.2019', 'George', '0']]
[['04.04.2019', 'George', '0']]
[['05.04.2019', 'George', '0']]

Итак, я хочу вывод, как это, когда я ввожу print(myComplex)

[[['26.03.2019', 'Micheal', '5'], ['26.03.2019', 'Smith', '8']], [['01.04.2019', 'Jack', '11'], ['01.04.2019', 'Michelle', '2'], ['01.04.2019', 'George', '9']], [['03.04.2019', 'Jack', '7']], [['02.04.2019', 'George', '0']], [['04.04.2019', 'George', '0']], [['05.04.2019', 'George', '0']]]

Как я могу это сделать?Можете ли вы дать мне решение для этого?

Ответы [ 3 ]

1 голос
/ 12 апреля 2019

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

0 голосов
/ 12 апреля 2019

Подобно тому, что сказал Айн Д, у вас может быть словарь

my_little_bit_complex_dict = {
    '03.04.2019' : [
                    {'name': 'Jack', 'number': 7}
                    ],
    '26.03.2019' : [
                    {'name': 'Michael', 'number': 7},
                    {'name': 'Smith', 'number': 8}
                    ]
}   

Но, если честно, вы можете рассмотреть возможность использования базы данных, если объем данных большой

CREATE TABLE mytable (
    somedate DATE,
    name VARCHAR(255),
    numberthingy INTEGER
)
0 голосов
/ 12 апреля 2019

Если ваш вывод "должен" выглядеть так, то я бы подумал, что вам просто придется перестроить его вручную.Если вы открыты для рабочих альтернатив, вам, возможно, будет легче управлять в качестве словаря:

{date: [[name,number],[name,number]], date2: [[name,number]]}

И хотя это не будет иметь большого значения для словаря, если он должен оставаться массивом спискарассмотрите yyyy.mm.dd для более легкой сортировки.

...