基于唯一键简化字典列表的方法

时间:2018-06-20 11:01:09

标签: python python-3.x list dictionary

这种情况适用于Python 3 我有以下词典列表。

data = [   
 {'id': 'AAA',
  'Temperature': 1.5,
  'time_utc': 1514677434,
  'longitude': 7.278415,
  'latitude': 46.223831,
  'altitude': 479},
 {'id': 'BBB',
  'Temperature': 1.5,
  'time_utc': 1514677561,
  'longitude': 7.269399,
  'latitude': 46.21502,
  'altitude': 555},
 {'id': 'AAA',
  'Temperature': 3.4,
  'time_utc': 1514677667,
  'longitude': 7.278415,
  'latitude': 46.223831,
  'altitude': 479},
 {'id': 'BBB',
  'Temperature': 2.5,
  'time_utc': 1514677196,
  'longitude': 7.269399,
  'latitude': 46.21502,
  'altitude': 555},
]

“ id”键是唯一的,因此我最终希望绘制每个“ id”(站)的温度时间序列。因此,所需的输出如下:

data = [   
 {'id': 'AAA',
  'thermo_module': {'datetime': [{'time_utc': 1514677434}, {'time_utc': 1514677667}], 'Temperature': [1.5,3.4]}
  'longitude': 7.278415,
  'latitude': 46.223831,
  'altitude': 479},
 {'id': 'BBB',
  'thermo_module': {'datetime': [{'time_utc': 1514677561}, {'time_utc': 1514677196}], 'Temperature': [1.5,2.5]}
  'longitude': 7.269399,
  'latitude': 46.21502,
  'altitude': 555},
]

我真的不知道在这种情况下如何进行,至少任何提示都会受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

使用简单的迭代

演示:

import pprint
d = {}

for i in data:
    if not i["id"] in d:
        d[i["id"]] = {'id': i["id"], 'thermo_module':{'datetime':[{'time_utc': i["time_utc"]}],  'Temperature':[i["Temperature"]]}, 'longitude':i["longitude"], 'latitude':i["latitude"], 'altitude':i["altitude"]}
    else:
        d[i["id"]]['thermo_module']["datetime"].append({'time_utc': i["time_utc"]})
        d[i["id"]]['thermo_module']["Temperature"].append(i["Temperature"])        


pprint.pprint(d.values())

输出:

[{'altitude': 479,
  'id': 'AAA',
  'latitude': 46.223831,
  'longitude': 7.278415,
  'thermo_module': {'Temperature': [1.5, 3.4],
                    'datetime': [{'time_utc': 1514677434},
                                 {'time_utc': 1514677667}]}},
 {'altitude': 555,
  'id': 'BBB',
  'latitude': 46.21502,
  'longitude': 7.269399,
  'thermo_module': {'Temperature': [1.5, 2.5],
                    'datetime': [{'time_utc': 1514677561},
                                 {'time_utc': 1514677196}]}}]