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_键)的情况下获得相同的结果

  • 为什么
    diff_dict.key
    会显示dict.name?我做错什么了吗

  • 另一方面,如果没有字符串引号('),如何打印键或其他元素,如列表、元组等

  • 与上面的#3相同,但括号([])


  • 谢谢大家:-)

    问题是,在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。要同时获取键和值,需要使用。