python3 入力データの辞書化 および ソートについて
解決済
回答 2
投稿
- 評価
- クリップ 0
- VIEW 1,059
コード自体は完成していて動いています。
しかし、イケてないコードだと思うので、アドバイスいただきたいです。
(悩み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を使う?)
よろしくお願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+4
リスト化せずとも、辞書(値を入れられる辞書)を作成できると思うのですが、方法はございますでしょうか?
- 一時変数を作らない方法
for name in input().split():
player_ans[name] = 0
- 辞書内包表記
player_ans = {name: 0 for name in input().split()}
print(i)で出力した結果がタプルになっていたので、やむを得ずprint(i[0])として、
keyを出力しました。しかし、これだと見直したときにわかりにくい気がするので、ほかにいい方法はありますでしょうか?
- アンパック
for key, value in sorted(player_ans.items(), reverse=True, key=lambda x: x[1]):
print(key)
from operator import itemgetter
for key, value in sorted(player_ans.items(), reverse=True, key=itemgetter(1)):
print(key)
- 最初からキーだけを利用する方法
for key in sorted(player_ans, reverse=True, key=lambda k: player_ans[k]):
print(key)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
悩み1
input().split(" ")
はstrなのでmap(str, ...)
は不要- 辞書の内包記法を使う
player_ans = {p: 0 for p in input().split(" ")}
悩み2
key=
をうまく使う
for player in sorted(player_ans, reverse=True, key=player_ans.get):
print(player)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2018/06/28 12:29
悩み解決しました。