首页 > 解决方案 > 缩短字典中键的长度

问题描述

我一直在尝试缩短字典的键。

这是d1

{
    'A0Z40': [ 'A14160,A14161,A14162,A14163,A14164,A14165,A14166' ],
    'A0Z41': [ 'A1403,A1407,A1408,A1409,A1410,A1411' ],
    'A0Z42': [ 'A1201,A1205', 'A12041,A12042,A12043,A12044,A12045,A12046' ],
    'A0Z43': [ 'A1101' ]
}

我试图得到这个:

{
    'A0Z' : [ 'A14160,A14161,A14162,A14163,A14164,A14165,A14166' ],  
            [ 'A1403,A1407,A1408,A1409,A1410,A1411' ], 
            [ 'A1201,A1205', 'A12041,A12042,A12043,A12044,A12045,A12046' ],   
            ['A1101']
}

我试过字典理解

d = {k[:3] : v for k, v in d.items() }

但它删除了值,因为字典只能有唯一的键......

您还有其他解决方案吗?

非常感谢

标签: pythonpandas

解决方案


您可以使用常规for循环get和默认值来执行此操作

d = {}
for k, v in d1.items():
    d[k[:3]] = d.get(k[:3], []) + v

这会将值中的列表组合到键下的一个列表中'A0Z'

{'A0Z': ['A14160,A14161,A14162,A14163,A14164,A14165,A14166', 'A1403,A1407,A1408,A1409,A1410,A1411', 'A1201,A1205', 'A12041,A12042,A12043,A12044,A12045,A12046', 'A1101']}

如果您想将值作为列表列表,只需v在每次迭代中将值放入列表中

d[k[:3]] = d.get(k[:3], []) + [v]

输出:

{'A0Z': [['A14160,A14161,A14162,A14163,A14164,A14165,A14166'], ['A1403,A1407,A1408,A1409,A1410,A1411'], ['A1201,A1205', 'A12041,A12042,A12043,A12044,A12045,A12046'], ['A1101']]}

推荐阅读