2016-12-08 14 views
1

私の辞書コードに問題があります。私はこれまで持っていることは、それは私の辞書に正しくすべての入力を追加することによって、完全に機能していますが、私はそれが私の入力かのようにする方法を見つけることができないよう、例えばthis-辞書に値を追加する

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です。ダン3を印刷するだけで、その2つの合計ではありません。誰もが理解できるように問題を明確に説明してくれることを願っています。助けてくれてありがとう!あなたはそれが既に存在していない場合は、新しい情報を追加したい

+1

@MooingRawrは技術的には正しくありません。彼は特定のキーのために既に保存されている値を上書きしています。彼は 'get_info()'の先頭に一度だけ辞書を作成します。 – TemporalWolf

答えて

2

ので、使用する場合は、名前があなたの辞書にすでにあるかどうかを確認する必要があることを行うには+=最初の値を上書きするのではなく、

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

Pythonのスタイリングでは、方法論を跳躍する前に一見するのではなく、[許可よりも許してほしいと思う方が簡単です](https://docs.python.org/2/glossary.html#term-eafp)が好きです。 – TemporalWolf

2

d[a] = b

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

する必要がありますこれはEAFPであるPythonのスタイリングの好みに従います。

1

メソッドを使用するたびに以前の値を上書きしています。

必要なのは、標準のdictの代わりにdefaultdictです(デフォルトは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 
関連する問題