如何标题 - 特定字符

时间:2012-12-01 22:05:08

标签: dictionary python-3.x formatting case

所以我创建了我的字典,然后在这个网站的一些好伙伴的帮助下,我设法以一种很好的方式将密钥打印给用户。然后我自己想通过如何按值排序字典,以便我可以按顺序打印唯一的键。

我在这里:

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种可能的选择:easy - medium - hard

所以我的第一个想法是通过格式化这些键来使它更好:

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

以下是3种可能的选择:EASY - MEDIUM - HARD

更好的是,我如何尝试仅首字母大写?所以我调查了它,我的第一个想法是找到一些格式来指定第一个字母。我找不到解决方案或更好的说,我找到一个给我留下更多问题:

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

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

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

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

1 个答案:

答案 0 :(得分: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'

希望这能为您提供有关如何使用其他方法操作每个选项字符串的一些想法。