Python 将字典值转换为新字典

Python 将字典值转换为新字典,python,dictionary,Python,Dictionary,我从API中提取json数据,在我的数据框架中有许多列包含字典。编写这些字典时,id和值是字典中的两个独立条目,如下所示: {'id': 'AnnualUsage', 'value': '13071'} 这些列的某些行仅包含一个字典条目,如上图所示,但其他行最多可以包含7个: [{'id': 'AnnualUsage', 'value': '13071'}, {'id': 'TestId', 'value': 'Z13753'}, {'id': 'NumberOfMe', 'value':

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

{'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'}


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

您可以进行dict理解。从dict列表中,编写一个新的dict,其中键是每个元素的
id
,值是每个元素的

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'}


您可以遍历这些值,并将每个值设置为字典值:

newdict = dict()
for x in original:
    newdict[x["id"]] = x["value"]

优雅的回答!谢谢这看起来正是我想要的解决方案。我想知道您是否知道如何在数据帧的列中迭代它。因此,如果列中的每一行都有自己的“原始”词典,我如何对其应用“newdict”词典理解?我尝试了一些类似于
CTG_df2['new']={subdct['id']:subdct['value']的东西,用于CTG_df2.iloc[0,]}
中的subdct,但它似乎没有正确地进行迭代。我目前的最佳选择似乎是使用while循环,并在I<100:a=CTG_df['applicationdfs'][I]CTG_df]时对每一行进行迭代['applicationdfs'][i]={subct['id']:a}i=i+1中的subct的subct['value']但如果有更简洁的方法,我很想知道。@DaveWilson如果你的
是原创的
,你可以做
pandas.DataFrame(原创)
将原始dict拆分为单独的键和值列;如果这不是您想要的,则编辑您的问题或创建一个新问题可能更有用,以便明确表示您想要一个熊猫解决方案-我自己对此不是很有经验。
newdict = dict()
for x in original:
    newdict[x["id"]] = x["value"]