在字典中添加值

时间:2016-12-08 20:55:54

标签: python dictionary

我的词典代码有问题。到目前为止,我有这个 -

def get_info():
    answer = "yes"
    d = {}
    while answer == "yes":
        a = input("Enter name: ")

        b = int(input("Enter hours: "))
        if b > 10 or b < 1:
            b = int(input("Enter hours: "))

        d[a] = b
        answer = yes_no("More Shifts?: ")

    if answer == "yes":
        get_info()
    elif answer == "no":    
        print(d)

def yes_no(msg):
    a = input(msg)
    while a!= "yes" and a!= "no":
        a = input("Enter yes or no: ")
    return a

def main():
    get_info()

通过将所有输入正确添加到我的字典中它完美地工作但我似乎无法找到一种方法来使它如果我输入,例如,“Andy”然后“2”然后“Andy”和“2”再次使我的字典最后打印出'Andy':4。另一个参考例子是“Dan”5和“Dan”3。我的代码只打印出Dan 3而不是总数二。我希望我能清楚地描述这个问题,让任何人都能理解。谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

如果新信息不存在,您希望附加新信息:

d[a] = b

应该是

try:
    d[a] += b
except KeyError:
    d[a] = b

这遵循python样式首选项EAFP

答案 1 :(得分:2)

为此,您需要检查名称是否已在字典中,如果是,请使用+=而不是覆盖第一个值。

if a in d:
    d[a] += b
else:
    d[a] = b

答案 2 :(得分:1)

您每次都使用自己的方法覆盖之前的值。

您需要的是defaultdict而非标准dict,默认为int类型。小例子:

import collections

d = collections.defaultdict(int)

d["Dan"] += 2
d["Dan"] += 2
d["Andy"] = 10

print(d)

结果:

defaultdict(<class 'int'>, {'Dan': 4, 'Andy': 10})

在您的上下文中:

d = collections.defaultdict(int)
while answer == "yes":
    ...
    d[a] += b