<p>假设字典是这样的:</p>
<pre><code>fruit_stand = {
"Lemon": [(Yellow, 5, 2.99)],
"Apple": [(Red, 10, 0.99), (Green, 9, 0.69)],
"Cherry": [(White, 2, 5.99),(Red, 5, 5.99)]
}
</code></pre>
<p>实际上,您只需遍历字典就可以得到它的键:</p>
^{pr2}$
<p>然后,您可以使用字典的<code>items</code>方法来获得<code>key</code>,<code>value</code>对的元组(您称之为“插入式”):</p>
<pre><code>for fruit_name, fruits in fruit_stand.items():
print fruit_name, "=>", fruits
# Lemon => [(Yellow, 5, 2.99)]
# Apple => [(Red, 10, 0.99), (Green, 9, 0.69)]
# Cherry => [(White, 2, 5.99),(Red, 5, 5.99)]
</code></pre>
<p><code>list</code>s(括号内的<code>[]</code>)也是可编辑的:</p>
<pre><code>for fruit in [(White, 2, 5.99),(Red, 5, 5.99)]:
print fruit
# (White, 2, 5.99)
# (Red, 5, 5.99)
</code></pre>
<p>因此,我们可以使用每个<code>fruits</code>列表来访问我们的<code>tuple</code>:</p>
<pre><code>for fruit_name, fruit_list in fruit_stand.items():
# Ignore fruit_name and iterate over the fruits in fruit_list
for fruit in fruit_list:
print fruit
</code></pre>
<p>正如我们在<code>items</code>中看到的,我们可以将元组解压为多个值:</p>
<pre><code>x, y = (1, 2)
print x
print y
# 1
# 2
</code></pre>
<p>因此,我们可以将每个<code>fruit</code>解压为其组成部分:</p>
<pre><code>for fruit_name, fruit_list in fruit_stand.items():
# Ignore fruit_name and iterate over the fruits in fruit_list
for color, quantity, cost in fruit_list:
print color, quantity, cost
</code></pre>
<p>然后得到总数并不难:</p>
<pre><code># We need to store our value somewhere
total_value = 0
for fruit_name, fruit_list in fruit_stand.items():
# Ignore fruit_name and iterate over the fruits in fruit_list
for color, quantity, cost in fruit_list:
total_value += (quantity * cost)
print total_value
</code></pre>
<hr/>
<p>尽管如此,有很多更清晰的做事方式:</p>
<ol>
<li><p>您可以使用列表理解来简化<code>for</code>循环:</p>
<pre><code>for fruit_name in fruit_stand
operation(fruit_name)
</code></pre>
<p>可以翻译为以下列表理解:</p>
<pre><code>[operation(fruit_name) for fruit_name in fruit_stand]
</code></pre>
<p>因此,我们可以将嵌套的<code>for</code>循环转换为:</p>
<pre><code>sum([cost * quantity \ # Final operation goes in front
for _, fruits in fruit_stand.items() \
for _, cost, quantity in fruits])
</code></pre>
<p>因为我们实际上不需要<em>列表,所以我们可以去掉它,而Python将为我们创建一个生成器:</p>
<pre><code>sum(cost * quantity \ # Note the missing []
for _, fruits in fruit_stand.items() \
for _, cost, quantity in fruits)
</code></pre></li>
<li><p>您可以将<code>__add__</code>方法添加到<code>Fruit</code>中,这样将两组水果一起添加在一起就可以得到这两组<code>Fruit</code>的总成本(但是您可能需要创建一个中间数据结构来完成此操作,例如<code>Basket</code>,因此<code>Fruit</code>不必担心实际上不属于{<cd13>}的{<cd17>},保存的意义是<code>Fruit</code>的任何实例都有内在量1。我省略了这个选项的代码,因为这个答案已经太长了。</p></li>
</ol>