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

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

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

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

Python

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

Q&A

解決済

1回答

409閲覧

Python ディクショナリのソートに関して

reppy

総合スコア14

Python 3.x

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

Python

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

0グッド

1クリップ

投稿2017/11/11 00:40

###質問内容
現在以下のソースコードのように、テキストファイルを読み込んでその中で一番多く使われている3つの文字をCounterを使ってカウントし出力するプログラムを書きました。カウントはアルファベットのみです。

しかし、出力部においてディクショナリのvalueでソートしてreverseして上から3つ取り出すのにあまりスマートではない書き方をしてしまっています。

どうにかして、もっと簡単に上位3つのkeyとvalueを取り出せないでしょうか?
文章読みづらくてすみません。

###該当のソースコード

Python

1import collections as col 2 3cnt = col.Counter() 4with open('win.txt', 'r') as text: 5 for sent in text: 6 for word in sent: 7 if 97 <= ord(word) < 97 + 26 or 65 <= ord(word) < 65 + 26: 8 cnt[word] += 1 9count = 1 10for key, value in sorted(cnt.items(), key=lambda x: x[1], reverse=True): 11 print(count, key, value) 12 count += 1 13 if count-1 == 3: 14 break 15 16# 出力はこういう風にしたいです。 17# 1 a 840 18# 2 e 774 19# 3 i 596 20

###補足情報(言語)
Python 3.6.2

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

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

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

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

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

guest

回答1

0

ベストアンサー

なぜCounterを使ったのでしょう?
全部Counterでできることなのに、それをしていない。
Counterの存在を知っているのに、Counterの機能を知らない、使わないなんてことがありえるのでしょうか。
Counterの項を読めば全部分かると思います。

http://docs.python.jp/3.6/library/collections.html#collections.Counter

python

1import collections 2 3with open('win.txt', 'r') as text: 4 cnt = collections.Counter(word for sent in text for word in sent if 97 <= ord(word) < 97 + 26 or 65 <= ord(word) < 65 + 26) 5 6for count, (key, value) in enumerate(cnt.most_common(3), start=1): 7 print(count, key, value) 8

投稿2017/11/11 02:02

quickquip

総合スコア11038

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

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

reppy

2017/11/11 05:39

完全に見落としておりました。愚問でしたね。回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問