Python中如何遍历字典内多列表并转换为指定格式的单一字典?
Python列表转指定格式字典的解决方案
嘿,我来帮你搞定这个列表转字典的问题!先理清楚你的需求:你有一堆包含RRD文件路径的列表,想把它们转换成一个以前缀(比如GDR、TSA)为键的字典对吧?
首先先明确你的输入数据(整理成更清晰的格式):
input_lists = [ [u'/var/www/cacti/rra/r1f-ktrx06zhry_traffic_in_14644.rrd'], [u'/var/www/cacti/rra/r1f-tsax02zhry_traffic_in_14954.rrd', u'/var/www/cacti/rra/r1f-tsax04zhry_traffic_in_14966.rrd'], [], [u'/var/www/cacti/rra/r1f-kyrx01zhry_traffic_in_14717.rrd'] ]
不过这里要先提一句:你给出的示例输出其实有个小问题——字典的键必须是唯一的,示例里把第二个TSA路径直接作为键是不符合字典规范的,后续使用起来会非常麻烦。所以我先给你推荐更合理的实现方式:让同一个前缀(比如TSA)对应所有相关的路径,用列表存储多个值。
实现步骤与代码
核心逻辑是:遍历每个子列表→跳过空列表→从路径里提取前缀(比如从r1f-tsax02zhry里提取TSA)→把前缀作为键,路径作为值存入字典(多路径就用列表存储)
# 你的原始输入数据 input_lists = [ [u'/var/www/cacti/rra/r1f-ktrx06zhry_traffic_in_14644.rrd'], [u'/var/www/cacti/rra/r1f-tsax02zhry_traffic_in_14954.rrd', u'/var/www/cacti/rra/r1f-tsax04zhry_traffic_in_14966.rrd'], [], [u'/var/www/cacti/rra/r1f-kyrx01zhry_traffic_in_14717.rrd'] ] result_dict = {} for sublist in input_lists: # 跳过空列表,避免无效处理 if not sublist: continue for path in sublist: # 从路径里拆分出文件名 filename = path.split('/')[-1] # 提取前缀:分割出r1f后的部分,取前3个字符转大写 prefix = filename.split('-')[1][:3].upper() # 处理多路径情况:键已存在就追加,不存在就新建列表 if prefix in result_dict: result_dict[prefix].append(path) else: result_dict[prefix] = [path] # 打印结果 print(result_dict)
运行后得到的结果是:
{ 'KTR': [u'/var/www/cacti/rra/r1f-ktrx06zhry_traffic_in_14644.rrd'], 'TSA': [u'/var/www/cacti/rra/r1f-tsax02zhry_traffic_in_14954.rrd', u'/var/www/cacti/rra/r1f-tsax04zhry_traffic_in_14966.rrd'], 'KYR': [u'/var/www/cacti/rra/r1f-kyrx01zhry_traffic_in_14717.rrd'] }
如果你确实需要类似示例的格式(不推荐)
要是你坚持要把多路径里的后续路径作为独立键(虽然这种结构很不实用),可以用下面的代码:
result_dict = {} current_prefix = None for sublist in input_lists: if not sublist: continue for idx, path in enumerate(sublist): filename = path.split('/')[-1] prefix = filename.split('-')[1][:3].upper() if idx == 0: result_dict[prefix] = path current_prefix = prefix else: # 把后续路径作为键,值可以设为对应的前缀或者None result_dict[path] = current_prefix print(result_dict)
这个代码的输出会接近你给出的示例,但再次提醒:这种结构会让后续的字典操作变得非常繁琐,尽量还是用第一种合理的结构哦!
内容的提问来源于stack exchange,提问作者Swe Zin Phyoe
相关产品推荐
相关产品推荐

