Python如何根据字典键的斜杠数量拆分生成两个新字典
问题需求
现有字典:
dictA = {'/run/xy':'foo', '/run':'bar', '/run/ab/cd':'baz'}
需要按照键的斜杠数量拆分生成两个新字典:
dict1:仅保留键中包含1个斜杠的键值对,预期结果为{'/run':'bar'}dict2:仅保留键中斜杠数量大于1的键值对,预期结果为{'/run/xy':'foo', '/run/ab/cd':'baz'}
原代码错误原因
原代码运行报错的核心问题有两个:
- 给
dict.update()传参时写的{k,dictA[k]}是集合(元素用逗号分隔),不是字典(键值对用冒号分隔),集合没有键值映射关系,update方法无法解析,直接触发报错。 - 用
len(k.split('/'))统计斜杠数会生成临时拆分列表,性能比直接调用字符串计数方法差。
正确实现
基础循环写法
逻辑直观,容易理解:
dictA = {'/run/xy':'foo', '/run':'bar', '/run/ab/cd':'baz'} dict1 = {} dict2 = {} # 直接遍历键值对,统计每个键的斜杠数量 for key, value in dictA.items(): slash_num = key.count('/') if slash_num == 1: dict1[key] = value elif slash_num > 1: dict2[key] = value
运行后结果完全符合预期:
dict1 = {'/run': 'bar'} dict2 = {'/run/xy': 'foo', '/run/ab/cd': 'baz'}
字典推导式写法
代码更简洁,适合熟悉Python语法的场景:
dictA = {'/run/xy':'foo', '/run':'bar', '/run/ab/cd':'baz'} dict1 = {k: v for k, v in dictA.items() if k.count('/') == 1} dict2 = {k: v for k, v in dictA.items() if k.count('/') > 1}
内容的提问来源于stack exchange,提问作者Vijesh
相关产品推荐
相关产品推荐

