【发布时间】:2014-12-17 06:37:26
【问题描述】:
使用this answer,我创建了defaultdict 的defaultdicts。现在,我想把那个嵌套很深的 dict 对象变回一个普通的 python dict。
from collections import defaultdict
factory = lambda: defaultdict(factory)
defdict = factory()
defdict['one']['two']['three']['four'] = 5
# defaultdict(<function <lambda> at 0x10886f0c8>, {
# 'one': defaultdict(<function <lambda> at 0x10886f0c8>, {
# 'two': defaultdict(<function <lambda> at 0x10886f0c8>, {
# 'three': defaultdict(<function <lambda> at 0x10886f0c8>, {
# 'four': 5})})})})
我认为这不是正确的解决方案:
import json
regdict = json.loads(json.dumps(defdict))
# {u'one': {u'two': {u'three': {u'four': 5}}}}
另外,this answer 也不够用,因为它不会在嵌套的 dict(s) 上递归。
【问题讨论】:
-
你为什么需要来转换这些?
-
如果你最后不想要
defaultdict,你有没有考虑写一个包装器,在普通的dicts 上使用setdefault来生成东西?在构建时让你的代码稍微复杂一点可能是一个更好的解决方案,而不是让它稍微简单一点,然后再增加一个额外的复杂性…… -
@abarnert 我唯一的答案是上面的基本回答....我对这个问题很好奇,认为可能有一个聪明的解决方案使用 reduce() 或 itertools 或其他东西.我知道我可以问一下酸洗的事……但我有点卡在这个问题上。我最近一直在研究 python 的这些部分,想看看我是否能学到一些新东西。 tl;博士因为我是个白痴
-
我看到了这一点,但只是现在我看到了答案。这就是为什么我问这个问题的原因......我经常认为没有有效/正确的方法来解决特定问题,所以我需要回溯,直到当前形式的问题“消失”。然而,我也经常遇到我从未想过的答案,使用我根本不知道的语言功能或其他智能。我问我想有类似的东西——我只是还不知道。
标签: python python-2.7 dictionary collections