2017-07-11 5 views
0

私は、辞書のキーであるユーザーからの入力を受け取り、そのキーに関連付けられた値を出力する関数を記述しようとしています。たとえば、 dic = {"hello": "hi"}です。ユーザーがhelloを入力すると、出力はhiになります。python 3辞書の値を印刷できませんでした

は、ここで私はこのコードのいずれかの出力を得ることはありません私のコード

def translate(myText):  
    dic = {"Hello":"hi", "New":"old", "bad":"good", "happy":"sad"} 
    for i in dic.items(): 
     if i == myText: 
      answer = dic.values([myText]) 
      print(answer) 

myInput= input("Enter a text to translate: ") 
result = myInput.split() 
translate(result) 

です。また、私はHello new badとタイプすると、例えば、1つの単語をもっと書いてみたいと思います。私はこんにちは古いことを取得する必要があります。複数の値を印刷するにはどうすればよいですか?

ありがとうございます。あなたの最初のコードが働いていなかった主な理由はmyInput.split()result文字列のリストではなく、リストを作ることである

def translate(myText): 

    dic = {"Hello":"hi", "New":"old", "bad":"good", "happy":"sad"} 

    for word in myText: 
     if word in dic: 
      print dic[word] 

myInput= input("Enter a text to translate: ") 
result = myInput.split() 
translate(result) 

+1

dic.values([myText]) - このコードはどう思いますか?私は、あなたが辞書の索引付けを誤解していると思います。 –

答えて

0

はこれを試してみてください。次に、myTextを辞書のキーと照合しようとしますが、文字列なので決してリストと同じではありません。

ディクショナリの美しさは、ディクショナリの要素を繰り返し処理することなく、特定の値をすぐに参照できるようにすることです。構文はちょうどdic[key]です。これにはdic.values()またはdic.items()は必要ありません(それらはかなり異なることがあります)。キーが辞書に含まれているかどうかを確認するには、key in dicと言うことができます。上記のコードは、入力内のすべての単語を繰り返し、辞書内にあるかどうかをチェックし、その場合は値を出力します。

0

ここでは、基本的にはインデックスの辞書です。これは、書き込むことによって、非常に簡単に行われる次

value = dict[key] 

をより一般的に、あなたはこの構文を使用することができ辞書に既存のキーをかどうかわからない場合:

value = dict.get(key, default_value) 

この意志を値がある場合はkeyに関連付けられた値を返し、そうでない場合はvalueにデフォルト値が割り当てられます。

最後に、私はあなたに実用的なコードスニペットを与えてはいけないと強く感じています。あなたはPythonを学ぶ初期の頃にはっきりしています。旅にようこそ。しかし、SOがあまりにも助けてくれれば、コーディング方法を学ぶことはありません。ここにあなたのコードを変更するためのいくつかのヒントがあります:.items()への呼び出しをしないでください

  • 、辞書の全体のポイントは、あなたが
  • 探しているものを見つけるためにそれらを反復処理する必要がないということです
  • split()を入力したい場合は、文字列のリストを取得します。それぞれの文字列をチェックしたい場合は、その文字列のリストをループするようにしてください。
  • dict[key]の構文またはdict.get(key, default_value)の構文を使用してコードを書き直してください。
  • ボーナスポイント:*argsを入力として使用して関数を書くと、外部forループが発生しません。中間のpythonのトピックと見なすことができるので、残りの部分が動作した後でこれを試してください。タプル、辞書に載っていないと表す ('bad', 'good') ('happy', 'sad') ('New', 'old') ('Hello', 'hi') :あなたはすべてのforループでiを印刷するとき
+0

@ChristianDean確かに、私は全体の質問を見ませんでした。私はそれをもっと完全に更新し、重要なことは完全な解決策を与えていないということです。 –

0

、あなたは次のような値を見ることができます。
いくつかのキーで特定の値を取得することはできませんが、インデックスで取得できます。

また、入力したキーですべての値を取得するには、split()関数で連結されたキーリストを反復して、すべての反復で関数translate()を呼び出します。あなたのキーでそれぞれの値を取得したい場合は、あなたのようなコードを書くことができます

def translate(myText): 

    dic = {"Hello":"hi", "New":"old", "bad":"good", "happy":"sad"} 
    answer = dic[myText] 
    print(answer) 

if __name__ == '__main__': 
    myInput = input("Enter a text to translate: ") 
    result = myInput.split() 

    for key in result: 
     translate(key) 

プラス) 私はあなたの質問を誤解して申し訳ありませんが、私は新しいコードで私の答えを更新し、タイプミスを修正します。

+0

'myText'を使うのではなく、自分の関数インデックスをハードコーディングした理由はありますか?また、OPは、エラーを避けるために、 'myText'が最初に辞書にあるかどうかをテストしたい。条件付きの文を使うか、(試してみると) 'try/except'ブロックを使うかのどちらかを試してみてください。 –

+0

もっと重要なのは、この場合、OPが間違った質問をしていることは明らかです。 XY問題(http://mywiki.wooledge.org/XyProblem)のケースですので、この直接的な質問に答えてはなりません。 –

+0

@ChristianDeanはい、私の悪いです。私は質問の最後の部分を欠場する。私は新しいコードで私の答えを更新しました。 – DevFallingstar

関連する問題