Python字典排序输出问题:去除列表括号并合并同值键
问题解决:移除输出中的列表括号与引号,合并相同值的键
你的核心问题是输出时直接使用了列表对象的默认字符串表示,导致出现[]和引号。只需要将列表转换为逗号分隔的字符串即可达到预期效果。
修改方案
方法1:在格式化输出时转换列表为字符串
只需要修改生成file_1a的代码,把列表用, 连接成字符串:
tv_dict = {} user_input = input() # 用with语句自动管理文件,更安全 with open(user_input) as file_open: file_content = file_open.readlines() new_content = [x.strip() for x in file_content] # 用列表推导式简化代码 list_len = len(new_content) // 2 loop_cy = 1 k = -1 v = -2 while loop_cy <= list_len: key = new_content[k] value = new_content[v] tv_dict[key] = value k += 2 v += 2 loop_cy += 1 val_sort1 = {k:[v for v in tv_dict.keys() if tv_dict[v] == k] for k in set(tv_dict.values())} val_sort2 = dict(sorted(val_sort1.items(), key=lambda val:val[0])) # 关键修改:用', '.join(v)把列表转成逗号分隔的字符串 file_1a = ''.join("{}: {}\n".format(k, ', '.join(v)) for k, v in val_sort2.items()) print(file_1a)
方法2:构建字典时直接生成字符串
也可以在创建val_sort1的时候就把列表转换成字符串,后续直接输出即可:
tv_dict = {} user_input = input() with open(user_input) as file_open: file_content = file_open.readlines() new_content = [x.strip() for x in file_content] list_len = len(new_content) // 2 loop_cy = 1 k = -1 v = -2 while loop_cy <= list_len: key = new_content[k] value = new_content[v] tv_dict[key] = value k += 2 v += 2 loop_cy += 1 # 直接生成逗号分隔的字符串,而非列表 val_sort1 = {k: ', '.join([v for v in tv_dict.keys() if tv_dict[v] == k]) for k in set(tv_dict.values())} val_sort2 = dict(sorted(val_sort1.items(), key=lambda val:val[0])) file_1a = ''.join("{}: {}\n".format(k, v) for k, v in val_sort2.items()) print(file_1a)
额外优化建议
- 使用
with open(...)语句处理文件,避免忘记关闭文件导致资源泄漏 - 用列表推导式
new_content = [x.strip() for x in file_content]替代循环append,代码更简洁高效 - 构建
tv_dict的逻辑可以进一步简化,比如用步长为2的循环遍历(注意需匹配你的文件内容顺序):
# 替代原来的while循环,更简洁 for i in range(0, len(new_content), 2): value = new_content[i] key = new_content[i+1] tv_dict[key] = value
内容的提问来源于stack exchange,提问作者trevnethers
相关产品推荐
相关产品推荐

