Выберите несколько словарных ключей из списка словарей, а также добавьте новые ключи - PullRequest
1 голос
/ 04 апреля 2019

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

Основной список выглядит следующим образом

result=[{'key1':123,'key2':'prod','key3':'abc','key4':'cde'},{'key1':123,'key2':'prod','key3':'def','key4':'qrs'},{'key1':321,'key2':'sale','key3':'dssd','key4':'cfde'}]

Ключи, необходимые в новом списке следующим образом, key5 и key6 являются новыми ключами, которые необходимо добавить

wantedkeys=['key1','key3','key5','key6']

Словарь Используется для добавления новых значений ключей

keyMap={(123, 'key5'): 'abc', (123, 'key6'): 'pqr'}

I 'Я могу выбрать key1 и key3, чтобы получить вывод, используя приведенный ниже синтаксис.

new_list = [{ key: record[key]  for key in wantedkeys } for record in result if record['key2']=='prod']

, но, расширяя его, чтобы добавить дополнительные ключи, я получаю синтаксическую ошибку.

new_list = [{ key : keyMap[record['key1'],key] if key in ['key5','key6'] else  key: record[key]  for key in wantedkeys } for record in result if record['key2']=='Prod']

Я знаю, что это можно сделать путем циклического перемещения по списку, но есть ли более питонный способ добиться этого с лучшей производительностью, поскольку в моем списке будет несколько миллионов записей, любая помощь будет принята с благодарностью

1 Ответ

0 голосов
/ 18 июня 2019

Получил решение. Надеюсь, это будет полезно

new_list = [dict({ key: record[key]  for key in ['key1','key3']},key5=keyMap[record['key1'],'key5'],key6=keyMap[record['key1'],'key6']) for record in result if record['key2']=='prod']
...