打印字典键不字典名称? 如何/为什么?(Print Dictionary Keys withou

2019-07-04 05:59发布

所以,我创建了一个字典上的一个小游戏设置难度级别。

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

钥匙将是困难的名称和值有一些比我会用它来计算的难度。

所以,我试图找出如何只打印键用户:

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

这将打印为:

Here are the 3 possible choices:  dict_keys(['hard', 'easy', 'medium'])

很显然,我不希望有显示的字典名称,所以我继续寻找,我没有找到它有效的解决方案:

diff_keys = diff_dict.keys()
print ('\nHere are the 3 possible choices: ',list(diff_keys))

但我还是想知道是否有其他方法来实现这一点,那么为什么等。 所以在这里我去了QS:

  1. 我可以达到同样的结果,而不装箱了新的元素,如diff_keys?

  2. 为什么diff_dict.keys显示字典。 名称? 难道我做错了什么?

  3. 在一个侧面说明,我怎么能打印键或像列表,元组等其他元素,而无需字符串引号(')?

  4. 同上#3,但在方括号([])

感谢和cheerio :-)

Answer 1:

问题是,在Python 3字典的方法keys()不返回一个列表,而是一种特殊的视图对象 。 该对象是否具有神奇的__str__方法是引擎盖下的物体上你每次叫print该对象; 因此对于通过调用创建的视图的对象keys() __str__被限定为使得所得到的字符串包括"dict_keys"

看一下吧:

In [1]: diff_dict = {'easy': 0.2, 'medium': 0.1, 'hard': 0.05}

In [2]: print('Here are the 3 possible choices:', diff_dict.keys())
Here are the 3 possible choices: dict_keys(['medium', 'hard', 'easy'])

In [3]: diff_dict.keys().__str__()
Out[3]: "dict_keys(['medium', 'hard', 'easy'])"

请注意,99.9%的时间,你不需要直接调用此方法,我只是做它来说明事物是如何工作的。

一般情况下,当你想打印一些数据,你几乎总是想做一些字符串格式化 。 在这种情况下,虽然,一个简单的str.join就足够了:

In [4]: print('Here are the 3 possible choices:', ', '.join(diff_dict))
Here are the 3 possible choices: medium, hard, easy

因此,要回答你的问题:

我可以达到同样的结果,而不装箱了新的元素,如diff_keys?

一个例子如上所示。

为什么diff_dict.keys显示字典。 名称? 难道我做错了什么?

由于其__str__方法工作的方式。 这是你所拥有的打印对象时,“直接”打交道。

我怎么能打印键或像列表,元组等其他元素,而无需字符串引号(')?

同上#3,但在方括号([])

打印他们,使他们__str__不叫。 (基本上不打印。)在你喜欢的任何方式构建一个字符串,各具特色的数据进去,然后打印。 您可以使用字符串格式化,以及大量有用的字符串方法 。



文章来源: Print Dictionary Keys without Dictionary Name? How/why?