Нужно выбрать отдельные элементы из разных списков и сохранить их в словаре - PullRequest
1 голос
/ 09 марта 2019

Я работаю с Python3.6 (особенно с Django), и у меня есть следующая ситуация:

У меня есть словарь списков, который возвращается мне в качестве вывода, возвращенного из ранее использованной функции, что-то вроде этого:

{'sensor_state_list': ['in_service', 'in_service'],
 'rx_sensor_delta_list': [0, 321144],
 'tx_sensor_delta_list': [0, 321144],
 'discard_sensor_delta_list': [0, 321144],
 'time_list': ['2019-03-08 10:30:11.049860+00:00',
  '2019-03-08 12:47:16.722241+00:00']}

Как видите, он содержит 5 списков, которые содержат набор похожих данных.

То, что я намерен сделать, - это выбрать один экземпляр из каждого списка одновременно и сохранить их как набор для этого конкретного экземпляра и сохранить его как словарь, чтобы я мог передать его в качестве выходных данных API и использовать его дляДиаграмма.

Вывод: желание будет выглядеть примерно так:

{'instance1' : 
              {'sensor_state' : 'in_service', 'rx_sensor_delta': 0, 'tx_sensor_delta': 0, 'discard_sensor_delta': 0, 'time': '2019-03-08 10:30:11.049860+00:00'}, 
 'instance2': 
              {'sensor_state' : 'in_service', 'rx_sensor_delta': 321144, 'tx_sensor_delta': 321144, 'discard_sensor_delta': 123451, 'time': '2019-03-08 12:47:16.722241+00:00'}

и т. д. по мере увеличения числа экземпляров в списке источников.

1 Ответ

0 голосов
/ 09 марта 2019

Предполагая, что все значения имеют одинаковую длину, вы можете сделать словарь-понимание:

d = {'sensor_state_list': ['in_service', 'in_service'],
     'rx_sensor_delta_list': [0, 321144],
     'tx_sensor_delta_list': [0, 321144],
     'discard_sensor_delta_list': [0, 321144],
     'time_list': ['2019-03-08 10:30:11.049860+00:00',
                   '2019-03-08 12:47:16.722241+00:00']}

c = len(d['sensor_state_list']) 
output = {f'instance{i+1}': {'_'.join(k.rsplit('_', 2)[:-1]): v[i] for k, v in d.items()} for i in range(c)}

# {'instance1': {'sensor_state': 'in_service', 'rx_sensor_delta': 0, 'tx_sensor_delta': 0, 'discard_sensor_delta': 0, 'time': '2019-03-08 10:30:11.049860+00:00'}, 
#  'instance2': {'sensor_state': 'in_service', 'rx_sensor_delta': 321144, 'tx_sensor_delta': 321144, 'discard_sensor_delta': 321144, 'time': '2019-03-08 12:47:16.722241+00:00'}}
...