仅用单循环无包导入 从Python列表生成字母为键浮点元组为值的字典
问题描述
给定Python列表:list1 = ['A','5','-0.5','D','0.5','-3','A','8','-0.7','C','4','1.6','D','1','0.6']
需要按照以下规则转换为目标字典:
- 字典的键为列表中的字母元素
- 键对应的值为列表,列表元素由紧随该字母后的两个字符串转换为float类型后组成的元组构成
- 要求仅使用一次循环实现,不允许导入任何外部包
预期输出示例:d = { "A" : [(5 ,-0.5), (8 ,-0.7)] , "D" : [(0.5 ,-3) , (1 , 0.6)] , "C" : [(4 , 1.6)] }
实现代码
list1 = ['A','5','-0.5','D','0.5','-3','A','8','-0.7','C','4','1.6','D','1','0.6'] res_dict = {} index = 0 list_len = len(list1) # 单次循环遍历列表 while index < list_len: current_item = list1[index] # 识别到字母元素时处理 if current_item.isalpha(): # 取后续两个元素转float组成元组 num_tuple = (float(list1[index+1]), float(list1[index+2])) # 字典键不存在则初始化 if current_item not in res_dict: res_dict[current_item] = [] res_dict[current_item].append(num_tuple) # 跳过已处理的两个数字元素,步进3 index += 3 else: # 兼容异常格式场景,正常合规输入不会进入该分支 index += 1
结果验证
打印res_dict即可得到符合要求的输出:{'A': [(5.0, -0.5), (8.0, -0.7)], 'D': [(0.5, -3.0), (1.0, 0.6)], 'C': [(4.0, 1.6)]}
如果需要元组内数值保留整数格式,可在类型转换时增加整数判断逻辑即可。
内容的提问来源于stack exchange,提问作者aflatoon
相关产品推荐
相关产品推荐

