Python:添加项目列表,该列表是字典中的值

时间:2015-09-27 23:19:43

标签: python list dictionary

我无法弄清楚如何将某些值添加到每个键的列表中。我有一些类型(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

它不断给我错误消息,无论是未定义的内容还是不正确的语法。 感谢

3 个答案:

答案 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)