如何将 defaultdict 转换为 dict?
- 2025-03-18 08:55:00
- admin 原创
- 46
问题描述:
我如何转换defaultdict
number_to_letter
defaultdict(<class 'list'>, {'2': ['a'], '3': ['b'], '1': ['b', 'a']})
成为一个共同点dict
?
{'2': ['a'], '3': ['b'], '1': ['b', 'a']}
解决方案 1:
您可以直接致电dict
:
>>> a
defaultdict(<type 'list'>, {'1': ['b', 'a'], '3': ['b'], '2': ['a']})
>>> dict(a)
{'1': ['b', 'a'], '3': ['b'], '2': ['a']}
但请记住,defaultdict是一个字典:
>>> isinstance(a, dict)
True
只是行为略有不同,当你尝试访问一个缺失的键时——通常会引发一个KeyError
——default_factory
而是调用:
>>> a.default_factory
<type 'list'>
这就是您print a
在字典的数据面出现之前所看到的内容。
因此,在不实际创建新对象的情况下获得更多类似字典的行为的另一个技巧是重置default_factory
:
>>> a.default_factory = None
>>> a[4].append(10)
Traceback (most recent call last):
File "<ipython-input-6-0721ca19bee1>", line 1, in <module>
a[4].append(10)
KeyError: 4
但大多数时候这并不值得麻烦。
解决方案 2:
如果你的 defaultdict 是递归定义的,例如:
from collections import defaultdict
recurddict = lambda: defaultdict(recurddict)
data = recurddict()
data["hello"] = "world"
data["good"]["day"] = True
将 defaultdict 转换回 dict 的另一种简单方法是使用json
模块
import json
data = json.loads(json.dumps(data))
当然,默认字典中的内容值需要限制在 json 支持的数据类型内,但如果您不打算在字典中存储类或函数,这应该不是问题。
解决方案 3:
如果您甚至想要一个将递归转换为递归的递归版本,defaultdict
您dict
可以尝试以下操作:
#! /usr/bin/env python3
from collections import defaultdict
def ddict():
return defaultdict(ddict)
def ddict2dict(d):
for k, v in d.items():
if isinstance(v, dict):
d[k] = ddict2dict(v)
return dict(d)
myddict = ddict()
myddict["a"]["b"]["c"] = "value"
print(myddict)
mydict = ddict2dict(myddict)
print(mydict)
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD