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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1599閲覧

このコードのどこがおかしいのですか?教えてください。

mosquito

総合スコア19

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/03/15 10:02

初めての投稿となります。そしてよろしくお願いします。

私はpython3を勉強している途中で、まだ初心者なので、
参考書を参考に色々といじっている最中です。

次のコードで予想に反していて、どうしても予想通りにならないのでご教授おねがいします。
(ちなみにこのコードになんの意味もありません(笑))


names = ['suzuki', 'satou', 'yosida']
names_dict = {nember+1:name for nember in range(len(names)) \

for name in names}

names_dict

{1:'yosida', 2:'yosida', 3:'yosida'}


となります。
予想では、

{1:'suzuki', 2:'satou', 3:'yosida'}

となるかなと思っていたのですが、どうも違うみたいです。

1,この予想のとおりにするにはどのように書けばいいのでしょうか。
2,また、どのような経緯でこのような結果になってしまったのでしょうか。

この2点についてご回答よろしくお願いします。

ちなみに環境ですが、


OS :Linux
インタラクティブモード :bpython3


です。

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

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

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

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

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

guest

回答2

0

既に解決したようですが、

names_dict = dict(enumerate(names, 1))

でいいはずですよ。

投稿2016/03/15 10:28

sharow

総合スコア1149

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

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

mosquito

2016/03/15 10:47

そのような方法もあるのですね! enumerate()関数ですか、調べてみました。 色々な表現方法があるのですね。また一つ学びました。ありがとうございます! どうやらこのenumerate()関数には様々な使い方があるようで、、、 頭に入れておきます。(頭から抜けなければいいのですが(笑))
guest

0

ベストアンサー

python

1names_dict = {nember+1:name[nember] for nember in range(len(names)) } 2names_dict = {nember+1:name for nember,name in zip(range(len(names)),names) }

とすれば、どちらでも期待の結果が得られます。

提示されたコードは、2重にfor文が有るので、

python

1names_dict = {1:'suzuki', 2:'suzuki', 3:'suzuki', 1:'satou', 2:'satou',3:'satou', 1:'yosida', 2:'yosida', 3:'yosida'}

と同等の動作になります。

投稿2016/03/15 10:09

編集2016/03/15 10:14
hiro-k

総合スコア902

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

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

mosquito

2016/03/15 10:21

私は驚いています。このように早速返信がもらえるとは、、、 嬉しい限りです。そして、謎も解けました。 同じキーを参照して上書きをしていた、、、ということでいいのでしょうかね。 何度も言いますが、とても感動しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問