Python提取字典字符串值拼接为列表/逗号串的更优实现方法
Python字典值拼接为逗号分隔串的优化实现
需求说明
给定字典如下,需要将所有value拼接为逗号分隔的字符串,或拆分后输出为元素列表:
mydict = {'fruits': 'banana, apple,grapefruit', 'vegetables': 'tomato, potato,brocolli', 'dry fruits': 'cashew, almond' } # 期望字符串输出 banana, apple,grapefruit,tomato,potato,brocolli,cashew,almond
实现方案
直接输出目标字符串
如果完全匹配给出的期望输出格式(保留原value里的空格),不需要做任何多余的字符串清洗,直接用str.join()拼接字典所有值即可,代码最简洁、性能最高:
result = ','.join(mydict.values()) print(result)
运行输出和预期完全一致:
banana, apple,grapefruit,tomato,potato,brocolli,cashew,almond
说明:
str.join()是Python官方推荐的字符串拼接方式,它会预先计算所有字符串的总长度,一次性申请内存完成拼接,比循环中用+拼接字符串的效率高很多,且不会出现手动拼接时末尾多逗号的问题。Python 3.7及以上版本字典默认保留插入顺序,输出顺序和字典定义时的键顺序一致。
输出拆分后的元素列表
如果需要得到每个食材单独组成的列表,可以先按逗号拆分每个value,做简单的空格清洗后汇总:
# 常规写法 item_list = [] for value in mydict.values(): # 按逗号拆分,去掉每个元素首尾多余空格 item_list.extend(part.strip() for part in value.split(',')) print(item_list) # 输出:['banana', 'apple', 'grapefruit', 'tomato', 'potato', 'brocolli', 'cashew', 'almond'] # 列表推导式简写 item_list = [part.strip() for value in mydict.values() for part in value.split(',')]
如果后续需要从列表转回逗号分隔串,同样用join即可:
result_str = ','.join(item_list)
原实现的可优化点
你之前写的代码存在几个明显问题:
- 用
+循环拼接字符串效率低:Python字符串是不可变对象,每次+操作都会生成新的字符串对象,数据量增大时性能损耗明显 - 多余的字符串处理不符合预期:
ele.replace(' ', '')会删掉所有空格,得到的结果会丢失apple前的空格,和给出的期望输出格式不符;且手动在每个片段后加逗号会导致最终结果末尾多一个多余逗号 - 不需要额外将
mydict.values()转成list,join方法可以直接接收可迭代对象
内容的提问来源于stack exchange,提问作者Anushka
相关产品推荐
相关产品推荐

