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 级别而不是在函数内使用索引?
我有一个有序词典列表。
我想将每个字典的第一个值设置为键,字典本身设置为值(包括名称),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):
.
为什么要在 class 级别而不是在函数内使用索引?