Доступ к спискам словарей и словари слияния с тем же ключом - PullRequest
0 голосов
/ 27 января 2019

Списки словарей, приведенные ниже, представляют собой короткий вырез моего набора данных.Каждый список содержит данные, измеренные на одной станции.Каждое измеренное значение затем помещается в отдельный словарь.Исходный набор данных содержит гораздо больше станций и больше словарей для каждой станции.

results =[[{'value': 14.6,'timestamp_measured': '2017-12-31T20:00:00+00:00',
            'station_number': 'NL1','formula': 'PM10'}, 
            {'value': 16.6, 'timestamp_measured': '2017-12-31T21:00:00+00:00',
             'station_number': 'NL1', 'formula': 'PM10'}],
            [{'value': 27.2, 'timestamp_measured': '2017-12-31T20:00:00+00:00',
              'station_number': 'NL2','formula': 'PM10'},
            {'value': 19.0, 'timestamp_measured': '2017-12-31T21:00:00+00:00',
             'station_number': 'NL2','formula': 'PM10'}]] 

Вместо того, чтобы иметь отдельный словарь для каждого измеренного значения, я хочу иметь только 1 словарь на номер станции, содержащий формулу'и список всех измеренных значений:

results = {'station_number': 'NL1', 'formula': 'PM10', 'value': [14.6, 16.6]},
          {'station_number': 'NL2', 'formula':'PM10', 'value': [27.2, 19.0]},

Каким будет питонский способ сделать это?

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Давайте начнем с того, что вы хотите получить: словарь станций, где значение каждой станции - это словарь, содержащий список value из каждого отчета.Поэтому сначала соберите постоянную часть, а затем соберите значения в списке:

new_stations = dict()

for station in results:
    # Copy the fixed info
    fixed = station[0]
    name = fixed["station_number"]
    this_station = { "formula": fixed["formula"], 
                     "station_number": name,
                     "value": []
                   }
    # Now collect the values
    for record in station:
        this_station["value"].append(record["value"])

    # Save the station in our main dict
    new_stations[name] = this_station
0 голосов
/ 27 января 2019
stations = {}
for lst in results:
    for d in lst:
        if d['station_number'] not in stations:
            stations[d['station_number']] = {
                'formula': d['formula'],
                'timestamp_measured': [], 
                'value': []
            }
        stations[d['station_number']]['timestamp_measured'].append(d['timestamp_measured'])
        stations[d['station_number']]['value'].append(d['value'])

Ключи - это номера станций, поэтому:

for k, v in stations.items():
    print('{}:\n{}'.format(k, v))

напечатает:

NL1:
{'formula': 'PM10', 'timestamp_measured': ['2017-12-31T20:00:00+00:00', '2017-12-31T21:00:00+00:00'], 'value': [14.6, 16.6]}
NL2:
{'formula': 'PM10', 'timestamp_measured': ['2017-12-31T20:00:00+00:00', '2017-12-31T21:00:00+00:00'], 'value': [27.2, 19.0]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...