Python3 如何将列表中多个字符串字典合并为一个字典?

Python3 如何将列表中多个字符串字典合并为一个字典?
最新回答
青苓菀

2021-09-08 19:05:48

在Python3中,将列表中多个字符串字典合并为一个字典,需先将字符串转换为字典对象,再通过update()方法合并。以下是具体实现及注意事项:

核心步骤
  1. 字符串转字典使用json.loads()将符合JSON格式的字符串转为字典。若字符串为Python字典格式(如单引号),需先替换为双引号或使用ast.literal_eval()。

  2. 合并字典通过dict.update()逐个合并字典,或使用字典解包(Python 3.5+)简化操作。

代码实现方法1:使用json.loads()(推荐)import json# 示例列表(注意:字符串需为合法JSON格式,即双引号)l1 = [ '{"xvda": {"I/O": {"r/s": "0.33", "await": "12.58", "w/s": "0.46"}, "use_%": "32", "total_G": "15G"}}', '{"xvdf": {"I/O": {"r/s": "0.00", "await": "20.23", "w/s": "0.01"}, "use_%": "2", "total_G": "100G"}}']result = {}for s in l1: # 将字符串转为字典并合并 result.update(json.loads(s))print(result)方法2:处理Python风格字符串(单引号)

若字符串使用单引号(非JSON标准),可用ast.literal_eval()安全解析:

import astl1 = [ "{'xvda': {'I/O': {'r/s': '0.33', 'await': '12.58', 'w/s': '0.46'}, 'use_%': '32', 'total_G': '15G'}}", "{'xvdf': {'I/O': {'r/s': '0.00', 'await': '20.23', 'w/s': '0.01'}, 'use_%': '2', 'total_G': '100G'}}"]result = {}for s in l1: # 替换单引号为双引号(可选,若字符串格式混乱) s = s.replace("'", '"') result.update(ast.literal_eval(s))print(result)方法3:字典解包(Python 3.5+)

更简洁的合并方式:

import jsonl1 = [ '{"xvda": {"I/O": {"r/s": "0.33"}}}', '{"xvdf": {"I/O": {"r/s": "0.00"}}}']# 使用字典解包合并result = {k: v for d in map(json.loads, l1) for k, v in d.items()}print(result)关键注意事项
  1. 字符串格式

    JSON要求双引号,若原字符串为单引号,需替换或使用ast.literal_eval()。

    避免直接eval(),存在安全风险。

  2. 键冲突处理update()会覆盖重复键的值。若需保留所有值,可改为合并嵌套字典:

    from collections import ChainMapresult = dict(ChainMap(*map(json.loads, l1)))
  3. 性能优化对于大规模数据,建议使用生成器表达式减少内存占用:

    result = {}for d in (json.loads(s) for s in l1): result.update(d)
输出示例

合并后的字典结构:

{ "xvda": {"I/O": {"r/s": "0.33", "await": "12.58", "w/s": "0.46"}, "use_%": "32", "total_G": "15G"}, "xvdf": {"I/O": {"r/s": "0.00", "await": "20.23", "w/s": "0.01"}, "use_%": "2", "total_G": "100G"}}

通过上述方法,可灵活处理不同格式的字符串字典并高效合并。