Python, распаковать и переупорядочить список заказанных словарей - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть список упорядоченных словарей.

Я хочу задать первое значение каждого словаря как ключ, а сам словарь - значение (включая имя) и вернуть новый список.

data = [
    OrderedDict(
        [('Name', 'Tel saki'), ('Area', '210'), ('Latitude', 32.866477), ('Longitude', 35.830773), ('elevation', 481),
         ('date_added', '13-03-2020')]),
    OrderedDict(
        [('Name', 'Mitzphe shelagim'), ('Area', '210'), ('Latitude', 33.30445), ('Longitude', 35.797814),
         ('elevation', 2110), ('date_added', '29-03-2020')]), OrderedDict(
        [('Name', 'Mitzphe adi'), ('Area', '769'), ('Latitude', 33.2253981), ('Longitude', 35.5495681),
         ('elevation', 680),
         ('date_added', '17-03-2020')]),
    OrderedDict(
        [('Name', 'Nhahal Oz'), ('Area', '300'), ('Latitude', 31.4762228), ('Longitude', 34.4974832),
         ('elevation', 68),
         ('date_added', '30-03-2020')]),
    OrderedDict(
        [('Name', '105'), ('Area', '210'), ('Latitude', 33.220439), ('Longitude', 35.808097), ('elevation', 1127),
         ('date_added', '07-04-2020')]),
    OrderedDict(
        [('Name', 'Ifthah'), ('Area', '300'), ('Latitude', 31.5487777), ('Longitude', 34.4873539), ('elevation', 29),
         ('date_added', '08-04-2020')])]

Мой код:


class RepackDictionaries:
    index = 0

    @classmethod
    def return_values_lists(cls):
        while cls.index < len(data):
            names = list(data[cls.index].values())[0]
            data_sets = [data[cls.index].values()]
            cls.index += 1
            return names, data_sets

    @classmethod
    def create_new_dicts(cls):
        names, data_sets = cls.return_values_lists()
        data = list(zip(names, data_sets))
        while cls.index < len(data):
            final_list = {name: data_set for name, data_set in data}
            cls.index += 1
            return final_list


if __name__ == '__main__':
    print(RepackDictionaries.create_new_dicts())

Что выводит на None, и я не могу понять, почему.

Ответы [ 2 ]

2 голосов
/ 09 апреля 2020

Использование класса выглядит излишним для такой тривиальной проблемы. Простая функция, использующая диктовку, будет выглядеть так:

def repack(data):
    return {next(iter(d.values())): d for d in data}
0 голосов
/ 09 апреля 2020

Вы не сбрасываете значение индекса между вызовами функций. Вам нужно установить cls.index=0 после names, data_sets = cls.return_values_lists() в def create_new_dicts(cls):. Поскольку вы этого не делаете, вы никогда не вводите, пока l oop в def create_new_dicts(cls):.

Почему вы используете индекс на уровне класса, а не внутри функции?

...