【问题标题】:Take a specific value from a list of dictionaries and use the value as a new key in a list of nested dictionaries从字典列表中获取特定值并将该值用作嵌套字典列表中的新键
【发布时间】:2021-10-20 17:05:22
【问题描述】:

我对 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'], ___)

任何帮助都会很棒!

【问题讨论】:

    标签: python python-3.x list dictionary


    【解决方案1】:

    您将 [new_data] 定义为 dict,但您实际上希望 new_data 作为字典。
    在没有SourceKey的情况下使用推导式获取数据内容:

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

    【讨论】:

    • 这成功了。我仍在努力使用理解,因为它们对我来说并不直接直观。我只是需要花更多的时间和他们在一起。谢谢你的回答!
    猜你喜欢
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2017-10-23
    • 2012-05-21
    相关资源
    最近更新 更多