![](/img/trans.png)
[英]How to extract a key value pair from a nested dictionary and output it in json
[英]How to dynamically extract key and value from nested dictionary?
我正在努力從字典記錄中動態提取值,我希望有人能提供幫助。
這是我的字典記錄從系統API看起來的樣子。
from collections import OrderedDict
OrderedDict([('Id', '0061J00000QPnGoQAL'),
('Name', 'Acme X-Author RenewalSep tx'),
('Account',
OrderedDict([('Region__c', 'Americas'), ('Name', 'Accenture')])),
('CreatedBy', OrderedDict([('Name', 'Jerret Moz')]))])
我的目標是使字典記錄看起來像
OrderedDict([('Id', '0061J00000QPnGoQAL'),
('Name', 'Acme X-Author'),
('Region__c', 'Americas'),
('Name', 'Accenture'),
('Name', 'Jerret Moz')])
如果更理想,但不確定是否可能
OrderedDict([('Id', '0061J00000QPnGoQAL'),
('Name', 'Acme X-Author'),
('Account.Region__c', 'Americas'),
('Account.Name', 'Accenture'),
('CreatedBy.Name', 'Jerret Moz')])
任何幫助或建議,不勝感激! 謝謝。
您的問題還不清楚。 特別是涉及到您將要輸入的內容時。 因此,以下答案適用於您提供的輸入,但是您可能需要根據您的需要調整條件,分割和其他方面。
您的輸入:
from collections import OrderedDict
D = OrderedDict([('Id', '0061J00000QPnGoQAL'),
('Name', 'Acme X-Author RenewalSep tx'),
('Account',
OrderedDict([('Region__c', 'Americas'), ('Name', 'Accenture')])),
('CreatedBy', OrderedDict([('Name', 'Jerret Moz')]))])
如何獲得第二個所需的輸出:
D2 = OrderedDict()
for key, value in D.items():
if key.lower() == "id":
D2[key] = value
elif key.lower() == "name":
D2[key] = value.split(" RenewalSep tx")[0]
elif type(value) == OrderedDict:
for key2, value2 in value.items():
D2[key + "." + key2] = value2
輸出:
OrderedDict([('Id', '0061J00000QPnGoQAL'),
('Name', 'Acme X-Author'),
('Account.Region__c', 'Americas'),
('Account.Name', 'Accenture'),
('CreatedBy.Name', 'Jerret Moz')])
通過dict,測試該值是否為dict,如果在內部並追加。
temp = OrderedDict()
for key,value in dict_name:
if isinstance(value,dict):
temp.update(value)
dict_name.update(temp)
您將其中的字典解壓縮到新的OrderedDict中,並將其添加到原始OrderedDict中
def get_dotted_dict(d, old=""):
new = OrderedDict()
for k,v in d.items():
if isinstance(v, dict):
for k2, v2 in v.items():
nk = '.'.join(filter(bool, [old,k,k2]))
new[nk] = get_dotted_form(v2, nk) if isinstance(v2, dict) else v2
else:
new[k] = v
return new
d = OrderedDict([('Id', '0061J00000QPnGoQAL'), ('Name', 'Acme X-Author RenewalSep tx'), ('Account', OrderedDict([('Region__c', 'Americas'), ('Name', 'Accenture')])), ('CreatedBy', OrderedDict([('Name', 'Jerret Moz')]))])
nd = get_dotted_form(d)
print nd
# OrderedDict([('Id', '0061J00000QPnGoQAL'), ('Name', 'Acme X-Author RenewalSep tx'), ('Account.Region__c', 'Americas'), ('Account.Name', 'Accenture'), ('CreatedBy.Name', 'Jerret Moz')])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.