技术求助:如何将指定List转换为Dict?现有代码未达预期
解决方法:将分组的键值对列表转换为字典列表
首先,咱们先看看你之前代码的问题:你用for i in store: print(dict(zip(i,i)))的时候,每个i是单个的键值对(比如['hostname ', ' ABCD']),zip(i,i)会把列表里的每个元素和自己配对,结果自然是键和值完全一样的字典,这肯定不是你想要的~
你的目标是把每3个键值对组合成一个主机信息的字典,对吧?这里有几种简单的实现方式:
方法1:循环分组转换
直接按每3个元素为一组,把每组转换成字典,再收集到列表里:
store = [['hostname ', ' ABCD'], ['fsystem ', ' /dev/sdb'], ['actual_size ', ' 2.5T'], ['hostname ', ' XYZ'], ['fsystem ', ' /dev/sdb'], ['actual_size ', ' 2.5T']] result = [] # 按步长3遍历索引,每次取3个元素的切片 for idx in range(0, len(store), 3): # 把当前组的键值对直接转成字典 host_info = dict(store[idx:idx+3]) result.append(host_info) print(result)
输出结果:
[{'hostname ': ' ABCD', 'fsystem ': ' /dev/sdb', 'actual_size ': ' 2.5T'}, {'hostname ': ' XYZ', 'fsystem ': ' /dev/sdb', 'actual_size ': ' 2.5T'}]
方法2:列表推导式简化
如果想让代码更简洁,可以用列表推导式一步完成:
result = [dict(store[idx:idx+3]) for idx in range(0, len(store), 3)]
效果和方法1完全一样,只是写法更紧凑。
可选优化:清理键值的多余空格
注意到你的键和值里都有多余的空格(比如hostname 、 ABCD),如果想去掉这些空格,可以在转换时处理一下:
result = [] for idx in range(0, len(store), 3): host_info = {} for key, value in store[idx:idx+3]: # 用strip()去掉首尾空格 host_info[key.strip()] = value.strip() result.append(host_info)
优化后的输出:
[{'hostname': 'ABCD', 'fsystem': '/dev/sdb', 'actual_size': '2.5T'}, {'hostname': 'XYZ', 'fsystem': '/dev/sdb', 'actual_size': '2.5T'}]
内容的提问来源于stack exchange,提问作者Shrikant
相关产品推荐
相关产品推荐

