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

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

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

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

Q&A

解決済

2回答

2320閲覧

python3 入力データの辞書化 および ソートについて

zeitaku_fire

総合スコア26

Python 3.x

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

0グッド

0クリップ

投稿2018/06/27 17:36

コード自体は完成していて動いています。
しかし、イケてないコードだと思うので、アドバイスいただきたいです。

(悩み1)
入力データをリスト化して、その後、辞書としています。
現状、無駄にコードが長くなってしまっていると感じています。

player = list(map(str, input().split(" "))) #['佐藤', '田中'] player_ans= {} for i in player: player_ans[i]=0 #{'佐藤': 0, '田中': 0} 入力データ:佐藤 田中

いつもは、下記コードを使って、入力データを辞書としていました。
しかし、これだとキーに値をいれることができなかったので、リスト化して辞書を作成する、上記コードとしました。

#今回は使用していないが、いつもは下記で入力データの辞書作成 player = set(map(str, input().split(" "))) #{'佐藤', '田中'}

■質問1:
リスト化せずとも、辞書(値を入れられる辞書)を作成できると思うのですが、方法はございますでしょうか?

(悩み2)
上記で作成した辞書に値を追加して、ソートして出力しました。
尚、出力したい結果は、keyのみです。

#↓値を追加した辞書 {'佐藤': 10, '田中': 50} #辞書の値で降順にソート。ソート後の値をiに for i in sorted(player_ans.items(),reverse=True, key=lambda x: x[1]): print(i) #('田中', 50) ('佐藤', 10) print(i[0]) #田中 佐藤

■質問2:
print(i)で出力した結果がタプルになっていたので、やむを得ずprint(i[0])として、
keyを出力しました。しかし、これだと見直したときにわかりにくい気がするので、ほかにいい方法はありますでしょうか?
抽象的で申し訳ないのですが、「print(i[0]) ※タプルの0番目を指定」というのが気に入らないです。。

下記のようなことをできればなと考えています。
辞書の値で降順ソート ⇒ 並び替えた辞書のキーを出力(keysを使う?)

よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

リスト化せずとも、辞書(値を入れられる辞書)を作成できると思うのですが、方法はございますでしょうか?

  • 一時変数を作らない方法

Python

1for name in input().split(): 2 player_ans[name] = 0
  • 辞書内包表記

Python

1player_ans = {name: 0 for name in input().split()}

print(i)で出力した結果がタプルになっていたので、やむを得ずprint(i[0])として、

keyを出力しました。しかし、これだと見直したときにわかりにくい気がするので、ほかにいい方法はありますでしょうか?

  • アンパック

Python

1for key, value in sorted(player_ans.items(), reverse=True, key=lambda x: x[1]): 2 print(key)

Python

1from operator import itemgetter 2 3for key, value in sorted(player_ans.items(), reverse=True, key=itemgetter(1)): 4 print(key)
  • 最初からキーだけを利用する方法

Python

1for key in sorted(player_ans, reverse=True, key=lambda k: player_ans[k]): 2 print(key)

投稿2018/06/27 18:34

LouiS0616

総合スコア35660

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

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

zeitaku_fire

2018/06/28 03:29

遅い時間に、ご回答いただきありがとうございます。 悩み解決しました。
guest

0

悩み1

  • input().split(" ")はstrなのでmap(str, ...)は不要
  • 辞書の内包記法を使う

python

1player_ans = {p: 0 for p in input().split(" ")}

悩み2

  • key=をうまく使う

python

1for player in sorted(player_ans, reverse=True, key=player_ans.get): 2 print(player)

投稿2018/06/28 01:13

YouheiSakurai

総合スコア6142

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問