Python技术问询:如何将文本文件中数字映射为键、属性列表为值的字典
实现属性-数字映射到数字-属性列表的字典
我完全明白你的需求:把这种attrX 逗号分隔数字串格式的文本,转换成以数字为键、关联属性列表为值的字典,比如数字1对应[attr1, attr2, attr5]这类结果。我来给你一步步拆解实现思路,再给出可直接运行的代码。
核心实现步骤
首先得理清输入文本的结构:它是由「属性名+对应数字串」两两组成的连续字符串。我们需要:
- 把整个文本拆分成独立的片段,再两两配对成「属性名+数字串」的组合;
- 遍历每个数字串,把数字拆分出来并转成整数(避免字符串键和整数键混淆);
- 逐个把属性添加到对应数字的列表中——如果数字已在字典里就追加,不在就新建列表。
完整代码示例
# 你的输入文本 input_text = "attr1 1,3,7,6,8,12,24,56 attr2 1,2,3 attr4 56,45,48,23,24,25,29,90,56,57,58,59 attr5 1,2,3,45,6,7,8,9,34,33" # 初始化存储结果的空字典 result_dict = {} # 按空格分割文本,得到["attr1", "1,3,...", "attr2", "1,2,3", ...] parts = input_text.split() # 两两遍历分割后的列表,步长设为2,每次取一个属性和对应的数字串 for i in range(0, len(parts), 2): current_attr = parts[i] nums_string = parts[i+1] # 把数字串按逗号分割,转成整数列表 numbers = [int(num) for num in nums_string.split(',')] # 遍历每个数字,更新字典 for num in numbers: if num in result_dict: # 数字已存在,追加当前属性 result_dict[num].append(current_attr) else: # 数字不存在,新建列表存入属性 result_dict[num] = [current_attr] # 按数字顺序输出结果(可选,方便查看) for key in sorted(result_dict.keys()): print(f"{key}: {result_dict[key]}")
代码关键点说明
- 两两分组:用
range(0, len(parts), 2)实现步长为2的遍历,确保每次都能取到对应的属性名和数字串; - 数字类型转换:把分割后的数字字符串转成整数,避免出现
"1"和1作为不同键的问题; - 重复数字处理:如果同一个数字出现在多个属性中(比如56在attr1和attr4里),代码会自动把所有关联属性追加到列表中,完全符合你给出的示例要求。
如果之前你的代码出现问题,大概率是这几个环节出错:比如没正确配对属性和数字串、没转换数字类型,或者处理重复数字时逻辑有误。你可以对比上面的代码排查问题~
内容的提问来源于stack exchange,提问作者Lee Yaan
相关产品推荐
相关产品推荐

