擅长:python、mysql、java
<p>与<code>a[itemtype] = allitemcostb</code>(简单地将该键的值设置为新成本)不同,如果该键还不存在,则需要创建一个<code>list</code>,如果该键存在,则需要将其添加到现有的<code>list</code>。使用<code>setdefault()</code>方法执行此操作。你知道吗</p>
<p>下面只使用了一个带有<code>itemtype:[itemcost, itemcost...]</code>的字典,没有单独的<code>list</code>,省去了手动递增的<code>while</code>循环,取而代之的是带有<code>xrange</code>的<code>for</code>循环,并用更直接的结构替换了大的分支结构(而不是“if it's <code>a</code>,do <code>a</code>”,而是“do what it is”)。行<code>if itemtype in ('b', 'm', 't', 'd', 'c'):</code>检查输入的<code>itemtype</code>是否是表示可用选项的单个字符串。如果输入的<code>itemcost</code>无法转换为<code>float</code>,则会捕获错误并提示用户重试。你知道吗</p>
<pre><code>a={}
n=4
for i in xrange(n):
itemtype = raw_input("enter the item type-b,m,t,d,c:")
itemcost = raw_input("enter the item cost:")
try:
itemcost = float(itemcost)
except ValueError:
print "Sorry, please enter a valid cost."
break
if itemtype in ('b', 'm', 't', 'd', 'c'):
a.setdefault(itemtype, []).append(itemcost)
else:
print "Sorry, please enter a valid type."
print a
</code></pre>