<p>您可以尝试使用递归defaultdict:</p>
<pre><code>from collections import defaultdict
# define a hierarchical defaultdict (of defaultdicts (of defaultdicts...))
class recursivedefaultdict(defaultdict):
def __init__(self):
self.default_factory = type(self)
# add an iterator recursively to create entries, sub-entries, etc.
def addToTree(it, v, accum):
try:
addToTree(it, v, accum[it.next()])
except StopIteration:
accum["words"] = v
# test it out
dictionary = {
4388464: ['getting'],
43881: ['got'],
827862 : ['Taruma', 'Varuna'],
}
d2 = recursivedefaultdict()
for k,v in dictionary.iteritems():
addToTree(iter(str(k)), v, d2)
# use recursion again to view the results
def dumpDict(d,indent=""):
for k,v in d.iteritems():
if k == "words":
print "%s- %s : %s" % (indent, k, v)
else:
print "%s- %s:" % (indent, k)
dumpDict(v, indent+" ")
dumpDict(d2)
</code></pre>
<p>给出:</p>
^{pr2}$
<p>我认为递归defaultdict是创建这些长度不可预测的嵌套dict的一种很好的方法。(请注意,如果我们添加的下一个值使用43884作为键,因为<code>d2[4][3][8][8][4]</code>已经存在一个条目,则会出现问题。)</p>