Python 打印没有字典名称的字典键?如何/为什么?
所以我为一个小游戏创建了一个设置难度的字典Python 打印没有字典名称的字典键?如何/为什么?,python,printing,dictionary,python-3.x,key,Python,Printing,Dictionary,Python 3.x,Key,所以我为一个小游戏创建了一个设置难度的字典 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: dic
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:
diff_dict.key
会显示dict.name?我做错什么了吗谢谢大家:-)问题是,在Python3中,dict的方法
keys()
不返回列表,而是返回一个特殊的。该对象具有一个属性,每当您打印该对象时,该属性都会在引擎盖下的对象上调用;因此,对于通过调用keys()
\uuuu str\uuuu
创建的视图对象,定义的结果字符串包括“dict\u 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%的时间您不需要直接调用此方法,我这样做只是为了说明如何工作
通常,当您想要打印一些数据时,您几乎总是想要执行一些操作。不过,在这种情况下,简单的解决方案就足够了:
In [4]: print('Here are the 3 possible choices:', ', '.join(diff_dict))
Here are the 3 possible choices: medium, hard, easy
因此,要回答您的问题:
我是否可以在不使用新元素(如diff_键)的情况下获得相同的结果
上面显示了一个示例
为什么diff_dict.key显示dict.name?我做错什么了吗
因为它的\uuu str\uu
方法就是这样工作的。这就是“直接”打印对象时必须处理的问题
如何在没有字符串引号(')的情况下打印键或其他元素,如列表、元组等
与上面的#3相同,但括号([])
打印它们,使其\uuuu str\uuuu
不被调用。(基本上,不要打印它们)以任何你喜欢的方式构造一个字符串,将你的数据制作成它,然后打印出来。您可以使用字符串格式,也可以使用许多有用的格式。缺少的要点是。dict_键覆盖\uuu repr\uuu
(用于\uuu str\uu
)。repr
的目的也解释了为什么它包含字符串的,
。@J.F.Sebastian坦率地说,我故意省略了它,以避免在答案中添加过多的细节,因为OP对于Python来说似乎是新的,并且用例并不需要完全理解\uuuu repr\uuu
和\uu str\uuu
(imho)之间的区别。所以如果你不介意的话,我不想把它编辑成答案。不过,将此作为“进一步阅读”的参考是很好的。谢谢你的评论:)@J.F.Sebastian:事实上,你必须更深入地回答#4:在列表
或元组
上调用\u repr\u
,而不是在每个元素上调用\u str\u
。但我同意Lev的观点,这在评论中比在回答中更好。非常感谢你提供的信息,效果很好,我学到了很多东西。请你也试着回答这个问题好吗?为什么str.join(dict)只返回str键,而我必须指定join(dict.values)来获取str值,这在默认情况下只是键吗?如果我想对str键和值都使用str.join呢?干杯。@Newbie有另一种神奇的方法来解释这一点,它叫做。它定义了当您在对象上迭代时,在每个步骤上得到的内容。当你迭代一个dict时,你会得到它的键。查看并向下滚动至iter(d)
。另外,作为一个简单的实验,您可以尝试在diff\u dict:print(k)
中使用k。要同时获取键和值,需要使用。