首页 > 解决方案 > 将字典值转换为新字典

问题描述

我正在从 API 中提取 json 数据,并且在我的数据框中有许多包含字典的列。这些字典的编写使得 id 和 value 是字典中的两个独立条目,如下所示:

{'id': 'AnnualUsage', 'value': '13071'}

这些列的某些行仅包含一个字典条目,如上所示,但其他行最多可包含 7 个:

[{'id': 'AnnualUsage', 'value': '13071'},
 {'id': 'TestId', 'value': 'Z13753'},
 {'id': 'NumberOfMe', 'value': '3'},
 {'id': 'Prem', 'value': '960002'},
 {'id': 'ProjectID', 'value': '0039'},
 {'id': 'Region', 'value': 'CHR'},
 {'id': 'Tariff', 'value': 'Multiple'},
 {'id': 'Number', 'value': '06860702'}]

当我尝试将此字典分解为单独的列属性时

CTG_df2 = pd.concat([CTG_df['id'], CTG_df['applicationUDFs'].apply(pd.Series)], axis=1)

我最终得到一个数据框中的列,每个列都包含上述条目的字典,即

{'id': 'AnnualUsageDE', 'value': '13071'}

有没有办法将我的字典值转换为新的键值对?例如,我想从以下转换:

{'id': 'AnnualUsageDE', 'value': '13071'}

{'AnnualUsageDE': '13071'}

如果可能的话,我将能够从这些属性创建新列。

标签: pythondictionary

解决方案


你可以做一个听写理解。从您的字典列表中,组成一个新字典,其中键是id每个元素的,值是value每个元素的。

original = [{'id': 'AnnualUsage', 'value': '13071'},
            {'id': 'TestId', 'value': 'Z13753'},
            {'id': 'NumberOfMe', 'value': '3'},
            {'id': 'Prem', 'value': '960002'},
            {'id': 'ProjectID', 'value': '0039'},
            {'id': 'Region', 'value': 'CHR'},
            {'id': 'Tariff', 'value': 'Multiple'},
            {'id': 'Number', 'value': '06860702'}]

newdict = {subdict['id']: subdict['value'] for subdict in original}
print(newdict)
# {'AnnualUsage': '13071',
#  'Number': '06860702',
#  'NumberOfMe': '3',
#  'Prem': '960002',
#  'ProjectID': '0039',
#  'Region': 'CHR',
#  'Tariff': 'Multiple',
#  'TestId': 'Z13753'}


推荐阅读