Given a “flatten” dictionary object, whose keys are dot-separated

最近面试做了这样一个题:'''Given a “flatten” dictionary object, whose keys are dot-separated. For example, { ‘A’: 1, ‘B.A’: 2, ‘B.B’: 3, ‘CC.D.E’: 4, ‘CC.D.F’: 5}. Implement a function in any language to transform it to a “nested” dictionary object. In the above case, the nested version is like:
{
  ‘A’: 1,
  ‘B’: {
    ‘A’: 2,
    ‘B’: 3,
  },
  ‘CC’: {
    ‘D’: {
      ‘E’: 4,
      ‘F’: 5,
    }
  }
}
It’s guaranteed that no keys in dictionary are prefixes of other keys.'''

答案(python做的):

d = {'A': 1, 'B.A': 2, 'B.B': 3, 'CC.D.E': 4, 'CC.D.F': 5}
new_d = {}
for key in d:
    if "." not in key:
        new_d[key] = d[key]
    else:
        lst = key.split(".")
        l = len(lst)
        now_d = new_d
        for i in range(l - 1):
            try:
                now_d[lst[i]]
            except:
                now_d[lst[i]] = {}
            now_d = now_d[lst[i]]
        now_d[lst[-1]] = d[key]
print(new_d)
{'B': {'B': 3, 'A': 2}, 'CC': {'D': {'E': 4, 'F': 5}}, 'A': 1}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值