首页 > 解决方案 > 如何从现有字典列表创建嵌套字典

问题描述

我已经有如下字典列表:

[{ 
  'acct': '2020', 
  'date': '2020-04-13', 
  'amount': 70.0, 
 },
{ 
  'acct': '2020', 
  'date': '2020-04-13', 
  'amount': 30.0, 
 },
{ 
  'acct': '2020', 
  'date': '2020-04-10', 
  'amount': 70.0, 
 },
{ 
  'acct': '2019', 
  'date': '2020-04-10', 
  'amount': 50.0, 
 }]

我想创建一个新的嵌套字典 → 其初始键为 →account number其值将是另一个以date→ 作为键的字典,其值将是total amount→ 通过将与该特定日期关联的所有金额相加(其中钥匙)。

我的预期输出应如下所示:

newDict= {
    "2020" : {
      '2020-04-10: 70.0
      '2020-04-13: 100.0, → (i.e., 70.0 + 30.0)
   },
    "2019" : {
      '2020-04-10: 50.0,
   },

标签: pythonpython-3.xlistdictionarynested

解决方案


请看下面的代码:

x = [
    { 
        'acct': '2020', 
        'date': '2020-04-13', 
        'amount': 70.0, 
    },
    { 
        'acct': '2020', 
        'date': '2020-04-13', 
        'amount': 30.0, 
    },
    { 
        'acct': '2020', 
        'date': '2020-04-10', 
        'amount': 70.0, 
    },
    { 
        'acct': '2019', 
        'date': '2020-04-10', 
        'amount': 50.0, 
    }
]


y = {}
for i in x:
    if i["acct"] not in y:
        y[i["acct"]] = {i["date"]: i["amount"]}
    else:
        if i["date"] in y[i["acct"]]:
            y[i["acct"]][i["date"]] += i["amount"]
        else:
            y[i["acct"]].update({i["date"]: i["amount"]})

print(y)

输出:

{
    '2020': {
        '2020-04-13': 100.0, 
        '2020-04-10': 70.0
    }, 
    '2019': {
        '2020-04-10': 50.0
    }
}

推荐阅读