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

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

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

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

971閲覧

pythonのアルファベット順への並び替え諸々について教えて下さい!

kakarot2020

総合スコア1

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/07/03 17:01

pythonのアルファベット順への並び替え諸々について教えて下さい!

1.実現したいこと

##↓以下の英語の文章の単語数をカウントするプログラムを書きたいのですが、書き方がいまいちわかりません。

###【英語の文章】
Keep on asking, and it will be given you;
Keep on seeking, and you will find;
keep on knocking, and it will be opened to you;
for everyone asking receives, and everyone seeking finds,
and to everyone knocking, it will be opened.

##↓以下のように出力するのが理想です。

###【理想の出力】
and 5
asking 2
be 3
everyone 3
find 1
for 1
given 1
it 3
keep 3
knoking 2
on 3
opend 2
receives 1
seeking 2
to 2
will 4
you 3
文字数: 42

#2.やってみたこと

##現状、私が書いてみたコードとその結果は以下のとおりです。

###【書いてみたコード】
シャープ(#) coding=utf-8

text='''
Keep on asking, and it will be given you;
Keep on seeking, and you will find;
keep on knocking, and it will be opened to you;
for everyone asking receives, and everyone seeking finds,
and to everyone knocking, it will be opened.
'''
data = text.replace(";" , " ").replace("," , " ").replace("`" , " ").replace("\n"," ").replace("." , " ")

words = data.split(" ")

counter=0
word_counter = {} #各単語のカウントのための「辞書型」配列

print(words)

for word in words:
if word in word_counter:
word_counter[word] += 1 #辞書にあれば、1を追加
else:
word_counter[word] = 1 #辞書になければ、1を設定
counter +=1 #文字数をカウントする

シャープ(#) 結果を表示
for (key, value) in word_counter.items():
print(key, value)

print("文字数:" , counter)

###【現状の出力結果】
['', 'Keep', 'on', 'asking', '', 'and', 'it', 'will', 'be', 'given', 'you', '', 'Keep', 'on', 'seeking', '', 'and', 'you', 'will', 'find', '', 'keep', 'on', 'knocking', '', 'and', 'it', 'will', 'be', 'opened', 'to', 'you', '', 'for', 'everyone', 'asking', 'receives', '', 'and', 'everyone', 'seeking', 'finds', '', 'and', 'to', 'everyone', 'knocking', '', 'it', 'will', 'be', 'opened', '', '']
12
Keep 2
on 3
asking 2
and 5
it 3
will 4
be 3
given 1
you 3
seeking 2
find 1
keep 1
knocking 2
opened 2
to 2
for 1
everyone 3
receives 1
finds 1
文字数: 54

#3.教えていただきたいこと

###【現状の出力結果で改善したい点】
####①['', 'Keep', 'on', 'asking',~~(中略)~~'opened', '', '']の部分と、その下の行にある12を出力したくない
####②単語をアルファベット順に出力したい(現状はその単語が登場した順番)
####③大文字のKeepと小文字のkeepが混在しているので、すべて小文字のkeepに統一したい
####④文字数が54とずれているので、42となるようにしたい

上記①~④を改善した結果↓の出力結果が得られるのがゴールです。

###【理想の出力】
and 5
asking 2
be 3
everyone 3
find 1
for 1
given 1
it 3
keep 3
knoking 2
on 3
opend 2
receives 1
seeking 2
to 2
will 4
you 3
文字数: 42

書き方がわかる方がいらっしゃいましたらご教示のほどお願いいたします。
長文失礼いたしました

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

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

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

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

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

guest

回答2

0

ベストアンサー

①['', 'Keep', 'on', 'asking',~~(中略)~~'opened', '', '']の部分と、その下の行にある12を出力したくない

printを削除

②単語をアルファベット順に出力したい(現状はその単語が登場した順番)

sortedでソート

③大文字のKeepと小文字のkeepが混在しているので、すべて小文字のkeepに統一したい

.lower() で小文字に変換

④文字数が54とずれているので、42となるようにしたいこうですか?

空文字 '' を累算しているため。.split() で複数の空白文字をひとまとまりにして分割。

python

1from collections import Counter 2 3text = ''' 4Keep on asking, and it will be given you; 5Keep on seeking, and you will find; 6keep on knocking, and it will be opened to you; 7for everyone asking receives, and everyone seeking finds, 8and to everyone knocking, it will be opened. 9''' 10 11words = text.replace(";" , " ").replace("," , " ").replace("`" , " ").replace("." , " ").lower().split() 12counter = Counter(words) 13for key, value in sorted(counter.items()): 14 print(key, value) 15print("文字数:" , sum(counter.values()))

投稿2020/07/03 17:37

編集2020/07/03 21:45
shiracamus

総合スコア5406

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

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

kakarot2020

2020/07/04 00:46

ご回答ありがとうございました!試してみたところ、思い通りの出力結果になったのでホッとしました。(笑) 一番早いご回答だったのでBAにさせていただきました!!!
guest

0

p.py

python3

1in_file = "in.txt" 2 3refs = {} 4word_count = 0 5with open(in_file, "r") as f: 6 for line in f: 7 words = line.replace(";" , " ") \ 8 .replace("," , " ") \ 9 .replace("`" , " ") \ 10 .replace("\n"," ") \ 11 .replace("." , " ") \ 12 .lower().split() 13 word_count += len(words) 14 for word in words: 15 if word not in refs: 16 refs[word] = 0 17 refs[word] += 1 18 19sorted_keys = sorted(refs.keys()) 20for key in sorted_keys: 21 print(f"{key:>10}{refs[key]:>4}") 22print(f"単語数 {word_count:>4}")

実行例
イメージ説明

参考情報

  • Pythonの辞書のリストを並び替える

https://qiita.com/yousuke_yamaguchi/items/23014a3c8d8beb8ba073

投稿2020/07/03 22:48

編集2020/07/04 00:54
katoy

総合スコア22324

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

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

kakarot2020

2020/07/04 00:44

ご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問