#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. Это сделало свое дело. Я все еще борюсь с использованием понятий, потому что они не являются для меня непосредственно интуитивными. Мне просто нужно проводить с ними больше времени. Спасибо вам за ваш ответ!