Возьмите определенное значение из списка словарей и используйте его в качестве нового ключа в списке вложенных словарей

#python #python-3.x #list #dictionary

Вопрос:

Я все еще относительно новичок в python и пытаюсь научиться разным вещам. Однако этот вопрос поставил меня в тупик. У меня есть список словарей. Я хочу извлечь значение SourceKey из словаря и использовать это значение в качестве нового ключа в списке, который также содержит все остальные словарные записи внутри нового ключа (надеюсь, это не прозвучало слишком запутанно). Например:

 data = [
{'AssetId':'1234',
 'CreatedById':'02i3s',
 'Billable__c': True,
 'SourceKey': '00a1234'},
{'AssetId':'4567',
 'CreatedById':'03j8t',
 'Billable__c':True,
 'SourceKey': '00b4321'}
]
 

Итак, теперь я хочу взять значение из SourceKey , чтобы создать словарь словарей, чтобы он выглядел так:

 new_data = [
  {'00a1234': {'AssetId':'1234',
               'CreatedById':'02i3s',
               'Billable__c': True},
  {'00b4321': {'AssetId':'4567',
               'CreatedById':'03j8t',
               'Billable__c':True}
]
 

В принципе, у меня есть эта отправная точка, но я просто застрял на том, как поместить пары ключ-значение вложенного словаря в новое значение, SourceKey потому что я знаю, что мне нужно ___ заменить его значениями ключей из остальной части data :

 [new_data] = {}
for row in data:
  if row['SourceKey']:
    new_data.update(row['SourceKey'], ___)
 

Любая помощь была бы фантастической!

Ответ №1:

Вы определяете [new_data] как диктант, но на самом деле хотите new_data как словарь.
используйте понимание, чтобы получить содержимое данных без источника.:

 from pprint import pprint
data = [
{'AssetId':'1234',
 'CreatedById':'02i3s',
 'Billable__c': True,
 'SourceKey': '00a1234'},
{'AssetId':'4567',
 'CreatedById':'03j8t',
 'Billable__c':True,
 'SourceKey': '00b4321'}
]

new_data = dict()
for row in data:
  if row['SourceKey']:
    new_data[row['SourceKey']] = {k:v for k,v in row.items() if k != 'SourceKey'}

pprint(new_data)
 

Выход:

 {'00a1234': {'AssetId': '1234', 'Billable__c': True, 'CreatedById': '02i3s'},
 '00b4321': {'AssetId': '4567', 'Billable__c': True, 'CreatedById': '03j8t'}}
 

Комментарии:

1. Это сделало свое дело. Я все еще борюсь с использованием понятий, потому что они не являются для меня непосредственно интуитивными. Мне просто нужно проводить с ними больше времени. Спасибо вам за ваш ответ!