如何将列表元素映射为字典键 实现字符串字符按Unicode值排序
代码问题修正
你现有代码的核心错误有三处:
ord(i)写法错误:ord()接收的参数是字符本身,你传入的i是循环的索引整数,无法得到字符对应的Unicode值- 多余的
for k,v in word_dic.items()循环:初始化阶段word_dic为空,这层循环永远不会执行,字典不会被赋值 - 全局变量风险:
word_dic和My_List定义在函数外部,多次调用函数会累计历史数据,建议移到函数内部
适配你需求的实现代码
如果你要保留先存列表再生成字典的逻辑,修改后代码如下:
def strsort(word): word_dic = {} My_List = [] # 拆分字符串存入列表 for i in range(len(word)): My_List.append(word[i]) # 遍历列表生成字符:Unicode值字典 for char in My_List: word_dic[char] = ord(char) return word_dic
测试调用strsort("ja")会返回{'j': 106, 'a': 97},符合你要求的字典格式。
简化写法&排序实现
如果不需要保留额外的列表存储步骤,可以用字典推导式直接生成映射,再完成排序:
def strsort(word): # 生成字符与Unicode值的映射字典 char_map = {char: ord(char) for char in word} # 按Unicode值升序排序,返回排序后的字符列表 sorted_result = sorted(char_map.items(), key=lambda item: item[1]) return [item[0] for item in sorted_result]
测试调用strsort("ja")会返回['a', 'j'],即按Unicode值排序后的字符序列。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

