Python并没有从字典中获取特定元素的明显方法

Joh*_*han 1 python dictionary

为什么我可以轻松地在Python中执行for循环,以按照我添加元素的顺序循环遍历字典的所有元素但是没有明显的方法来访问特定元素?当我说元素我正在谈论一个关键+值对.

我已经看了一些关于Python的基本教程在字典上说的但是没有一个回答我的问题,我也找不到我在docs.python.org的答案.

根据: 访问python字典中的特定元素(Senderies评论),dict应该是无序的,但为什么for循环按照我把它们放入的顺序打印它们?

kin*_*all 7

您可以按键访问字典中的特定元素.这就是字典.如果该行为不是您想要的,请使用字典以外的其他内容.

一个dict应该是无序的但是为什么for循环按照我把它们放入的顺序打印它们?

巧合:基本上,你碰巧按照Python喜欢的顺序放入它们.这并不难做,特别是对于整数(ints是他们自己的哈希,并且倾向于以升序数字顺序从dict中出来,尽管这是CPython 的实现细节,在其他Python实现中可能不正确) ,特别是如果你按照数字顺序放入它们.

"无序"实际上意味着您无法控制订单,并且由于各种特定于实现的标准,它可能会发生变化,因此您不应该依赖它.当然,当你迭代一个字典时,元素会以某种顺序出现.

如果您需要能够通过数字索引访问字典元素,有很多方法可以做到这一点.collections.OrderedDict是标准的方式; 键总是按照添加的顺序返回,因此您始终foo[foo.keys()[i]]可以访问第ith个元素.您还可以使用其他方案.


Pet*_*ell 5

通过散列密钥来访问Python dicts.因此,如果您有任何类型的大小的字典,并且按照您将它们放入的顺序出现,那么是时候开始投注彩票了!

my_dict = {}
my_dict['a'] = 1
my_dict['b'] = 2
my_dict['c'] = 3
my_dict['d'] = 4

for k,v in my_dict.items():
    print k, v
Run Code Online (Sandbox Code Playgroud)

收益率:

a 1
c 3
b 2
d 4
Run Code Online (Sandbox Code Playgroud)