Понимание вложенного словаря в Python со списком значений - PullRequest
1 голос
/ 11 марта 2020

У меня есть три словаря, которые я хотел бы объединить:

dict_A = {'Archives': '1234',
          'Content Revenue': '4567'}

dict_B = {'Archives': {'Content Partners Draft': '1111',
                       'Revenue Dashboard': '2222',
                       'Customer Lifetime Value Dashboard': '333',
                       'Customer Liftime Value V3': '4444'},
          'Content Revenue': {'License Tracker': '5555',
                              'MONTH_END_PARTNER_REPORT': '6666',
                              'Par': '7777',
                              'Report': '8888',
                              'Impressions': '9999'}}

dict_C = {'Content Partners Draft': {'Content Partner Payout': '1111',
                                     'Device Partner Payments': '1111',
                                     'FirstRights (FirstRights xReference)': '1111',
                                     'Sheet1 (Combined Partner Rev Share & Usage Rev Share)': '1111',
                                     'Sheet1 (Rev Share xReference)': '1111'},
          'Revenue Dashboard': {'Device Breakdown CPM and Fill Rate': '1111',
                                'Device CPM and Fill Rate Targets': '1111',
                                'Platform Breakdown CPM and Fill Rate': '1111',
                                'Platform CPM and Fill Rate Targets': '1111'},
          'Customer Lifetime Value Dashboard': {'LTV Data Source 1-9-2020 Extract': '1111'},
          'Customer Liftime Value V3': {'Customer LTV Data Source': '1111'},
          'License Tracker': {'Sheet1 (Licensing)': '1111'},
          'MONTH_END_PARTNER_REPORT': {'impressions_monthly': '1111', 'kpis_monthly_est': '1111'},
          'Par': {'impressions_monthly': '1111', 'kpis_daily_est': '1111', 'kpis_monthly_est': '1111', 'timelines': '1111'},
          'Report': {'kpis_monthly_est': '1111', 'partner_kpis_prog_hourly (public)': '1111'},
          'Impressions': {'impressions_daily': '1111', 'impressions_monthly': '1111'}}

Я пытаюсь объединить их с этим вложенным пониманием слова:

combined_dict = {
    outer_key : {nested_key : nested_value 
                 for nested_key in dict_B[outer_key]
                 for nested_value in dict_C[nested_key]}
    for outer_key in dict_A}

и получаю такой результат:

{'Archives': {'Content Partners Draft': 'Sheet1 (Rev Share xReference)',
              'Customer Lifetime Value Dashboard': 'LTV Data Source 1-9-2020 '
                                                   'Extract',
              'Customer Liftime Value V3': 'Customer LTV Data Source',
              'Revenue Dashboard': 'Platform CPM and Fill Rate Targets'},
 'Content Revenue': {'Impressions': 'impressions_monthly',
                     'License Tracker': 'Sheet1 (Licensing)',
                     'MONTH_END_PARTNER_REPORT': 'kpis_monthly_est',
                     'Par': 'timelines',
                     'Report': 'partner_kpis_prog_hourly (public)'}}

Результат успешно объединяет значения из dict_A и dict_B, но включает только одно значение из dict_ C. Можно ли иметь список значений (ключей) в качестве значение в понимании вложенного словаря?

Спасибо!

Мой ожидаемый вывод будет включать полный список ключей в качестве вложенных значений:

{'Archives': {'Content Partners Draft': ['Content Partner Payout', 'Device Partner Payments', 'FirstRights (FirstRights xReference)', 
                                         'Sheet1 (Combined Partner Rev Share & Usage Rev Share)', 'Sheet1 (Rev Share xReference)'],
              'Customer Lifetime Value Dashboard': ['LTV Data Source 1-9-2020 Extract'],
              'Customer Liftime Value V3': ['Customer LTV Data Source'],
              'Revenue Dashboard': ['Device Breakdown CPM and Fill Rate', 'Device CPM and Fill Rate Targets', 'Platform Breakdown CPM and Fill Rate', 
                                    'Platform CPM and Fill Rate Targets']}
{'Content Revenue': {'Impressions': ['impressions_daily', 'impressions_monthly'],
                     'License Tracker': ['Sheet1 (Licensing)'],
                     'MONTH_END_PARTNER_REPORT': ['impressions_monthly', 'kpis_monthly_est'],
                     'Par': ['impressions_monthly', 'kpis_daily_est', 'kpis_monthly_est', 'timelines'],
                     'Report': ['kpis_monthly_est', 'partner_kpis_prog_hourly (public)']}}

1 Ответ

1 голос
/ 11 марта 2020

вы можете использовать:

combined_dict = {
    outer_key: {nested_key: list(dict_C[nested_key].keys())
                for nested_key in dict_B[outer_key]}
    for outer_key in dict_A}

вывод:

{'Archives': {'Content Partners Draft': ['Content Partner Payout',
   'Device Partner Payments',
   'FirstRights (FirstRights xReference)',
   'Sheet1 (Combined Partner Rev Share & Usage Rev Share)',
   'Sheet1 (Rev Share xReference)'],
  'Revenue Dashboard': ['Device Breakdown CPM and Fill Rate',
   'Device CPM and Fill Rate Targets',
   'Platform Breakdown CPM and Fill Rate',
   'Platform CPM and Fill Rate Targets'],
  'Customer Lifetime Value Dashboard': ['LTV Data Source 1-9-2020 Extract'],
  'Customer Liftime Value V3': ['Customer LTV Data Source']},
 'Content Revenue': {'License Tracker': ['Sheet1 (Licensing)'],
  'MONTH_END_PARTNER_REPORT': ['impressions_monthly', 'kpis_monthly_est'],
  'Par': ['impressions_monthly',
   'kpis_daily_est',
   'kpis_monthly_est',
   'timelines'],
  'Report': ['kpis_monthly_est', 'partner_kpis_prog_hourly (public)'],
  'Impressions': ['impressions_daily', 'impressions_monthly']}}

эта строка for nested_value in dict_C[nested_key]} заставляет вас иметь только один ключ из dict_C в конечном результате, он устанавливает для одного и того же ключа nested_key все значения из dict_C[nested_key], в dict один ключ может иметь только одно значение

...