我无法弄清楚如何将某些值添加到每个键的列表中。我有一些类型(b,m,t,d,c)是键,然后我想将这些项的成本添加到列表中,这是每次循环时字典的值。 这就是我到目前为止所做的:
a={}
allitemcostb=[]
allitemcostm=[]
allitemcostt=[]
allitemcostd=[]
allitemcostc=[]
n=4
while n>0:
itemtype=raw_input("enter the item type-b,m,t,d,c:")
itemcost=input("enter the item cost:")
if itemtype="b":
allitemcostb.append(itemcost)
a[itemtype]=allitemcostb
if itemtype="m":
allitemcostm.append(itemcost)
a[itemtype]=allitemcostm
if itemtype="t":
allitemcostt.append(itemcost)
a[itemtype]=allitemcostt
if itemtype="d":
allitemcostd.append(itemcost)
a[itemtype]=allitemcostd
if itemtype="c":
allitemcostc.append(itemcost)
a[itemtype]=allitemcostc
else:
print "Sorry please enter a valid type"
n=n-1
print a
它不断给我错误消息,无论是未定义的内容还是不正确的语法。 感谢
答案 0 :(得分:2)
而不是a[itemtype] = allitemcostb
,只需将该键的值设置为新的费用,如果该密钥尚未存在,则需要创建list
或将其添加到现有的list
如果有的话。使用setdefault()
方法执行此操作。
以下仅使用带有itemtype:[itemcost, itemcost...]
且没有单独的list
的字典,省去了手动递增的while
循环,转而使用for
循环{ {1}},并使用更直接的结构替换大型分支结构(而不是"如果它是xrange
,请a
,"它确实" 34;做任何事情")。行a
检查输入的if itemtype in ('b', 'm', 't', 'd', 'c'):
是否是表示可用选项的单字符字符串。如果输入的itemtype
无法转换为itemcost
,则会捕获错误并提示用户重试。
float
答案 1 :(得分:0)
试试这个:
a = {}
all_item_cost_b=[]
all_item_cost_m=[]
all_item_cost_t=[]
all_item_cost_d=[]
all_item_cost_c=[]
n = 4
while n > 0:
item_type = input("enter the item type-b,m,t,d,c:")
item_cost = input("enter the item cost:")
if item_type == "b":
all_item_cost_b.append(item_cost)
a[item_type] = all_item_cost_b
elif item_type == "m":
all_item_cost_m.append(item_cost)
a[item_type] = all_item_cost_m
elif item_type == "t":
all_item_cost_t.append(item_cost)
a[item_type] = all_item_cost_t
elif item_type == "d":
all_item_cost_d.append(item_cost)
a[item_type] = all_item_cost_d
elif item_type == "c":
all_item_cost_c.append(item_cost)
a[item_type] = all_item_cost_c
else:
print("Sorry please enter a valid type")
n = n - 1
print(a)
给我们一个反馈。如果能解决您的问题,请不要忘记标记为已回答。 欢呼声。
答案 2 :(得分:0)
以下是两种解决方案。
第一个不是那么严格。它将允许用户输入itemtype的任何值,但不能输入itemcost
a={}
n=4
while (n>0):
itemtype = input("enter the item type-b,m,t,d,c:")
itemcost = input("enter the item cost:")
while(True):
try:
itemcost = float(itemcost)
break;
except ValueError:
print ("Sorry, please enter a valid cost.")
itemcost = input("enter the item cost:")
if itemtype.lower() in "b m t d c".split():
a[itemtype] = a.get(itemtype,list())+[itemcost]
n-=1
print (a)
第二种形式对用户输入都是严格的,并会一直提示,直到用户输入预期值
a={}
n=4
while (n>0):
itemtype = input("enter the item type-b,m,t,d,c:")
##user enters a wrong value
while(itemtype.lower() not in "b m t d c".split() ):
print ("Sorry, please enter a valid item.")
itemtype = input("enter the item type-b,m,t,d,c:")
itemcost = input("enter the item cost:")
##user enters a wrong value
while(True):
try:
itemcost = float(itemcost)
break;
except ValueError:
print ("Sorry, please enter a valid cost.")
itemcost = input("enter the item cost:")
a[itemtype] = a.get(itemtype,list())+[itemcost]
n-=1
print (a)