<p>较短:</p>
<pre><code># recursive build up the prefix for the current level
def format(rule, start=True, prefix=""):
for (key, value) in rule.iteritems():
if isinstance(value, type({})):
format(value, not start, ("{0}<{1} = " if start else "{0}{1}> AND ").format(prefix, key))
else:
print "{0}{1}> > {2}".format(prefix, key, value)
</code></pre>
<p>因此,在更大的规则集/递归dict上测试它:</p>
<pre><code>rules2 = {4: {'a': 'e',
'c': 'No',
'f': 'No',
'l': 'e',
'm': 'No',
'n': {19: {'b': 'e',
'h': 'e',
'k': 'e',
'n': 'e',
'o': 'e',
'r': 'No',
'w': {21: {'d': {1: {'f': 'No', 's': 'e', 'y': 'No'}},
'g': 'e',
'l': {2: {'c': 'e', 'n': 'e', 'w': 'No', 'y': 'No'}},
'p': 'e',
'w': 'e'}},
'y': 'e'}},
'p': 'No',
's': 'No',
'y': 'No'}}
format(rules2)
</code></pre>
<p>产量:</p>
<pre><code><4 = a> > e
<4 = p> > No
<4 = c> > No
<4 = f> > No
<4 = y> > No
<4 = s> > No
<4 = m> > No
<4 = l> > e
<4 = n> AND <19 = b> > e
<4 = n> AND <19 = w> AND <21 = p> > e
<4 = n> AND <19 = w> AND <21 = w> > e
<4 = n> AND <19 = w> AND <21 = d> AND <1 = y> > No
<4 = n> AND <19 = w> AND <21 = d> AND <1 = s> > e
<4 = n> AND <19 = w> AND <21 = d> AND <1 = f> > No
<4 = n> AND <19 = w> AND <21 = g> > e
<4 = n> AND <19 = w> AND <21 = l> AND <2 = y> > No
<4 = n> AND <19 = w> AND <21 = l> AND <2 = c> > e
<4 = n> AND <19 = w> AND <21 = l> AND <2 = w> > No
<4 = n> AND <19 = w> AND <21 = l> AND <2 = n> > e
<4 = n> AND <19 = y> > e
<4 = n> AND <19 = h> > e
<4 = n> AND <19 = k> > e
<4 = n> AND <19 = r> > No
<4 = n> AND <19 = o> > e
<4 = n> AND <19 = n> > e
</code></pre>