返回字典中的第一个键 \- Python 3

新手上路,请多包涵

我正在尝试使用以下代码打印键和值:

 data = {"Key1" : "Value1", "Key2" : "Value2"}
print(data.keys()[1])
print(data.values()[1])

我得到错误

'dict_keys' object does not support indexing

上述代码有什么问题?

接受的输出:

 Key2
Value2

原文由 user7800892 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 669
2 个回答

它确实取决于您所说的 first 的意思。在 Python 3.6 中,字典中的条目按键排序,但可能与您期望的方式不同。

举个例子:

 >>> data = {"Key1" : "Value1", "Key2" : "Value2"}

现在添加密钥 0

 >>> data[0] = "Value0"
>>> data
{'Key1': 'Value1', 'Key2': 'Value2', 0: 'Value0'}

所以零在最后。但是如果你从头开始构建字典,就像这样:

 >>> data = {0: "Value0", "Key1" : "Value1", "Key2" : "Value2"}

你得到这个结果

>>> data
{0: 'Value0', 'Key1': 'Value1', 'Key2': 'Value2'}

这说明了您不应依赖于顺序的原则,顺序仅由 dict 实现定义,在 CPython 3.6 及更高版本中,顺序是输入顺序。为了以不同的方式说明这一点:

 >>> data = {0: "Value0", "Key1" : "Value1", "Key2" : "Value2"}
>>> sorted(data.keys())
Traceback (most recent call last):
  File "<pyshell#42>", line 1, in <module>
    sorted(data.keys())
TypeError: '<' not supported between instances of 'str' and 'int'

Guido 在这个问题上是这样说的:

我想用手挥动…指令的顺序。是的,在 CPython 3.6 和 PyPy 中,它们都是有序的,但这是一个实现细节。我不想 强迫 所有其他实现都效仿。我也不希望太多人开始依赖于此,因为他们的代码将在 3.5 中中断。 (需要依赖关键字参数或类属性的顺序的代码应该相对不常见;但人们会开始太容易地依赖所有字典的顺序。我想提醒他们,他们正在冒险,他们的代码不会向后兼容。)

完整的帖子在 这里

原文由 BoarGules 发布,翻译遵循 CC BY-SA 4.0 许可协议

最短:

 mydict = {"Key1" : "Value1", "Key2" : "Value2"}
print( next(iter(mydict)) ) # 'Key1'

对于键和值:

 print( next(iter( mydict.items() )) ) # ('Key1', 'Value1')

原文由 cssyphus 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题