2017-01-11 4 views
0

私はポケモン "データベース"をソートしようとしています。私はプログラムがすべてのポケモンを出力するようにしたい:名前、タイプ、進化する、進化する。それぞれの名前は私のpokemon辞書のキーです。各値は、情報をキー(型、進化、進化)に含む別の辞書です。これらのキー値は望ましい出力です。問題はtypeキーがその値としてリストを持っていることであり、私はそれを実行しようとすると、私はこのエラーを取得する:辞書に値としてリストする - 'str'と 'list'オブジェクトを連結できません

Name: Bulbasaur 
Traceback (most recent call last): 
    File "pokemon.py", line 51, in <module> 
    print("Type: " + info["type"]) 
TypeError: cannot concatenate 'str' and 'list' objects 

次の私のコードです:私は出力がしたい

pokemon = { 
    "bulbasaur": { 
     "type": ["grass", "poison"], 
     "evo_from": "none", 
     "evo_to": "ivysaur" 
     }, 
    "ivysaur": { 
     "type": ["grass", "poison"], 
     "evo_from": "bulbasaur", 
     "evo_to": "venusaur" 
     }, 
    "venusaur": { 
     "type": ["grass", "poison"], 
     "evo_from": "ivysaur", 
     "evo_to": "none" 
     }, 
    "charmander": { 
     "type": ["fire"], 
     "evo_from": "none", 
     "evo_to": "charmeleon" 
     }, 
    "charmeleon": { 
     "type": ["fire"], 
     "evo_from": "charmander", 
     "evo_to": "charizard" 
     }, 
    "charizard": { 
     "type": ["fire", "flying"], 
     "evo_from": "charmeleon", 
     "evo_to": "none" 
     }, 
    "squirtle": { 
     "type": ["water"], 
     "evo_from": "none", 
     "evo_to": "wartortle" 
     }, 
    "wartortle": { 
     "type": ["water"], 
     "evo_from": "squirtle", 
     "evo_to": "blastoise" 
     }, 
    "blastoise": { 
     "type": ["water"], 
     "evo_from": "wartortle", 
     "evo_to": "none" 
     } 
    } 
for poke, info in pokemon.items(): 
    print("\nName: " + poke.title()) 
    print("Type: " + info["type"]) 
    print("Evolves from " + info["evo_from"]) 
    print("Evolves to " + info["evo_to"]) 

次のようになります。

Name: Bulbasaur 
Type: Grass, Poison 
Evolves from none 
Evolves to Ivysaur 

答えて

3

あなたtype dictのメンバーはリストであり、あなたは文字列とリストを連結することはできません。代わりに、リストのすべてのメンバーを文字列に参加させ、それを表示します。

print("Type: " + ', '.join(info["type"])) 

か、タイプがリストであり、あなたはそのように扱う必要がある通常のREPL形式のリストを表示するには、

print("Type: %r" % info["type"]) 
+0

ありがとう、 "。ジョイン"働いた。そして、私が探していた正確な出力を私にくれました。 – HWG

+0

に注意してください。文字列を連結することは、 'str.format'や'% '演算子を使用して回避するのが一般的です(私の2番目の例のように)。複数の文字列を連結している場合、一連の一時オブジェクトが作成されますが、これは遅いです。 'str.format'メソッドはそれを避けます。 2つの文字列を連結するには、実際には問題ではありませんが、注意する価値があります。 –

1

を望んだ場合、あなたは要素を表示する方法を決定する必要がありますスタートとして、あなたの文字列とリスト、

の、あなたはそれらをカンマ区切りたいこと

"Type: {}".format(','.join(info["type"])) 
3

実際には、後者を文字列に変換することなく、文字列とリストを連結することはできません。

幸いにも、printの場合、連結する必要はありません。

print("Type:", info["type"]) 

これは、リストのデフォルトのPython表現を使用します。あなたはこれをカスタマイズしたい場合は、str.joinを使用することができます。これに

print("Type: " + info["type"]) 

print("Type:", ", ".join(info["type"])) 
+0

または前者をリストに追加します。 – martineau

0

は単純にこの行を変更

print("Type: " + str(info["type"])) 
1

問題があるが、あなたのようにtypesを持っていることリスト。あなたは使用したいstr.join()

for poke, info in pokemon.items(): 
    print("\nName: " + poke.title()) 
    print("Type: " + ', '.join(info["type"])) 
    print("Evolves from " + info["evo_from"]) 
    print("Evolves to " + info["evo_to"]) 
関連する問題