質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

5499閲覧

【python初学者】"TypeError: format requires a mapping"

16Cha

総合スコア19

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2015/01/06 09:20

今日から始めたpythonの初学者です。
以下のようなコードを実行すると
"TypeError: format requires a mapping"というエラーメッセージが出ます。
どこが何故いけないのか教えていただけないでしょうか。

lang

1a = 101 2b = {"yamada":100, "suzuki":101} 3print "yamada: %(yamada)d suzuki: %d" % (b, a)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーの内容は、Map型のオブジェクトに引き当てに行こうとしているのにMap型でないオブジェクトが引き渡されているというエラーですね。
タプルの中にディクショナリーオブジェクトが含まれてはいますが、printが引き渡されたタプルに対してyamadaを探しに行っているのでエラーになっています。
タプルかディクショナリーのどちらかに合わせて渡さないといけないように思います。

投稿2015/01/06 10:53

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

16Cha

2015/01/06 11:28

回答ありがとうございます! タプルの要素としてディクショナリを入れているのがそもそも文法違反ですか?
退会済みユーザー

退会済みユーザー

2015/01/06 11:52

タプルにディクショナリーを入れることは文法違反ではありません。 printf 形式の文字列書式化(http://docs.python.jp/3.3/library/stdtypes.html#old-string-formatting)に記載があるのですが、「format が単一の引数しか要求しない場合、 values はタプルでない単一のオブジェクトでもかまいません。 [5] それ以外の場合、 values はフォーマット文字列中で指定された項目と正確に同じ数の要素からなるタプルか、単一のマップオブジェクトでなければなりません。」 とされていて、マップキー指定子と通常の指定子の同居ができないのだと思います。 str.formatを使用すればあるいは可能なのかもしれませんが、ちょっと試した限りでは難しそうでした。
16Cha

2015/01/07 11:32

頂いた回答を見ながらやっと分かってきました。 printにはディクショナリーの中からyamadaを探すように指示したのに、間違ってタプルを渡してしまったので、yamadaではなくbというディクショナリーが見つかってしまったということですね。 >>「それ以外の場合、 values はフォーマット文字列中で指定された項目と正確に同じ数の要素からなるタプルか、単一のマップオブジェクトでなければなりません。」 参照していただいた上の文をみてだいぶ分かった気がします。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問