0

そこで私は自分の辞書を作成し、このサイトの何人かの親切な仲間の助けのおかげで、うまくキーをユーザーに出力することができました。次に、自分で辞書を値で順序付けして、順序付けられた方法でキーのみを出力できるようにする方法を考え出しました。

これが私がいる場所です:

diff_dict = {'easy':0.2, 'medium':0.1, 'hard':0.05} # difficulty level dict

from collections import OrderedDict

diff_dict = OrderedDict(sorted(diff_dict.items(), key= lambda x: x[1], reverse\
 = True))


print ('\nHere are the 3 possible choices: ', ' - '.join(diff_dict))

どの出力:

可能な選択肢は次の 3 つです: 簡単 - 中程度 - 難しい

したがって、私の最初の考えは、これらのキーを次のようにフォーマットすることで、さらに良くすることでした。

print ('\nHere are the 3 possible choices: ', ' - '.join(diff_dict).upper())

EASY - MEDIUM - HARD の 3 つの選択肢があります。

では、最初の文字だけ大文字にしてみませんか?そこで調べてみたところ、最初に考えたのは、最初の文字を指定するフォーマットを見つけることでした。私は解決策を見つけることができませんでした。あるいは、より良い言い方をすれば、私はいくつかの質問を残したものを見つけました:

print ('\nHere are the 3 possible choices: ', ' - '.join(diff_dict).title())

可能な選択肢は次の 3 つです: イージー - ミディアム - ハード

それはまさに私が探していた出力ですが、私は好奇心旺盛なので、次のようなフィードバックが必要でした:

  1. 同じことを str.upper などの文字列フォーマットで実現したい場合はどうすればよいでしょうか?
  2. 最初の文字だけでなく、特定の文字を変更したい場合はどうすればよいですか? (置換、ケース、何でも)
4

1 に答える 1

1

これには を使用する必要はありませんOrderedDict。リスト内包表記を使用すると、はるかに簡単になります。

options = [o.title() for o in sorted(diff_dict, key=lambda k: diff_dict[k], reverse=True)]
print('\nHere are the 3 possible choices: ', ' - '.join(options))

[expr for var in iterable]リスト内包表記は、 のキーを並べ替えて取得した各文字列にメソッドを適用し.title()ますdiff_dict.title()このようにして、すでに結合されている全体に適用するのではなく、各単語を個別にフォーマットできます。

これは以下を出力します:

可能な選択肢は次の 3 つです: イージー - ミディアム - ハード

これが機能する理由を知りたい場合は、構成要素の一部を次に示します。

>>> sorted(diff_dict, key=lambda k: diff_dict[k], reverse=True)
['easy', 'medium', 'hard']
>>> [o.title() for o in sorted(diff_dict, key=lambda k: diff_dict[k], reverse=True)]
['Easy', 'Medium', 'Hard']
>>> ' - '.join([o.title() for o in sorted(diff_dict, key=lambda k: diff_dict[k], reverse=True)])
'Easy - Medium - Hard'

他の方法で各オプション文字列を操作する方法について、いくつかのアイデアが得られることを願っています。

于 2012-12-01T22:07:59.423 に答える