修改字典键

小普拉塔利亚

嗨,我有一本像下面这样的字典

{
'namelist': [{'name':"John",'age':23,'country':'USA'},
                   {'name':"Mary",'age':12,'country':'Italy'},
                   {'name':"Susan",'age':32,'country':'UK'}],
'classteacher':'Jon Smith'
}

我想知道是否可以将其更改为

 {
 'namelist': [{'name_1':"John",'age_1':23,'country_1':'USA'},
               {'name_2':"Mary",'age_2':12,'country_3':'Italy'},
               {'name_3':"Susan",'age_3':32,'country_3':'UK'}],
 'classteacher':'Jon Smith'
 }

通过在每个键的最后一个位置添加 _1, _2 .... 有可能吗?感谢您的帮助

洛朗 H。

这是我的单行样式解决方案,即使您有除“namelist”以外的许多键,它也能工作:

d = {'namelist': [{'name':"John",'age':23,'country':'USA'},
                   {'name':"Mary",'age':12,'country':'Italy'},
                   {'name':"Susan",'age':32,'country':'UK'}],
     'classteacher':'Jon Smith'
    }


d = {k:[{f'{k2}_{nb}':v2 for k2,v2 in i.items()} for nb,i in enumerate(v,1)] if isinstance(v,list) else v for k,v in d.items()}

print(d)
# {'namelist': [{'name_1': 'John', 'age_1': 23, 'country_1': 'USA'},
#               {'name_2': 'Mary', 'age_2': 12, 'country_2': 'Italy'},
#               {'name_3': 'Susan', 'age_3': 32, 'country_3': 'UK'}]}, 
#  'classteacher': 'Jon Smith'
# }

然而,正如 Aran-Fey 所说,这不是真正可读的,并且很难维护。所以我也建议你使用嵌套 for 循环的解决方案:

d1 = {'namelist': [{'name':"John",'age':23,'country':'USA'},
                   {'name':"Mary",'age':12,'country':'Italy'},
                   {'name':"Susan",'age':32,'country':'UK'}],
      'classteacher':'Jon Smith'}

for k1,v1 in d1.items():
    if isinstance(v1,list):
        for nb,d2 in enumerate(v1,1):
            for k2 in list(d2):
                d2[f'{k2}_{nb}'] = d2.pop(k2)

print(d1)
# {'namelist': [{'name_1': 'John', 'age_1': 23, 'country_1': 'USA'},
#               {'name_2': 'Mary', 'age_2': 12, 'country_2': 'Italy'},
#               {'name_3': 'Susan', 'age_3': 32, 'country_3': 'UK'}]}, 
#  'classteacher': 'Jon Smith'
# }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章