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())

以下是 3 种可能的选择:简单 - 中等 - 困难

更好的是,我尝试只大写第一个字母怎么样?所以我研究了一下,我的第一个想法是找到一些格式来指定第一个字母。我找不到解决方案,或者更好地说,我找到了一个让我有更多问题的解决方案:

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

以下是 3 种可能的选择:简单 - 中等 - 困难

所以这正是我正在寻找的输出,但我很好奇,所以我想要一些反馈,例如:

  1. 如果我想实现相同但使用字符串格式(如 str.upper)怎么办?
  2. 如果我想更改特定字符而不仅仅是第一个字符怎么办?(替换,案例,随便)
4

1 回答 1

1

您不需要为此使用 an 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 回答