Python,解压并重新排序有序字典列表

Python, unpack and reorder list of ordered dictionaries

我有一个有序词典列表。

我想将每个字典的第一个值设置为键,字典本身设置为值(包括名称),return 一个新列表。

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,我不明白为什么。

使用 class 对于这样一个微不足道的问题来说似乎有点矫枉过正。使用字典理解的简单函数如下所示:

def repack(data):
    return {next(iter(d.values())): d for d in data}

您没有在函数调用之间重置索引值。您需要在之后设置 cls.index=0 names, data_sets = cls.return_values_lists()def create_new_dicts(cls): 中。由于您不这样做,因此您永远不会在 def create_new_dicts(cls):.

中输入 while 循环

为什么要在 class 级别而不是在函数内使用索引?