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

时间:2011-07-15 00:17:52

标签: python dictionary

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

我已经查看了Python上一些关于词典的基本教程,但没有一个回答我的问题,我也无法在docs.python.org找到答案。

根据: accessing specific elements from python dictionary(Senderies评论)dict应该是无序的但是为什么for循环按照我把它们放入的顺序打印它们?

5 个答案:

答案 0 :(得分:7)

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

  

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

巧合:基本上,你碰巧按照Python喜欢的顺序放入它们。这不是很难做到,特别是对于整数(int s是他们自己的哈希值,并且倾向于以升序数字顺序从dict中出来,尽管这是实现细节在其他Python实现中可能不是真的CPython,特别是如果你按照数字顺序将它们放在一起开始。

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

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

答案 1 :(得分: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

的产率:

a 1
c 3
b 2
d 4

答案 2 :(得分:0)

d = {}
d['first'] = 1
d['second'] = 2
d['third'] = 3
print d
# prints {'seconds': 2, 'third': 3, 'first': 1}
# Hmm, just like the docs say, order of insertion isn't preserved.

print d['third']
# prints 3
# And there you have it: access to a specific element

答案 3 :(得分:0)

如果要按插入顺序遍历项目,则应使用OrderedDict。普通的字典不保证也会这样做,所以如果你依赖它就会在以后遇到麻烦。

如果要访问特定项目,则应使用[]运算符或get()方法通过其键访问该项。毕竟,这是dict的主要功能。

答案 4 :(得分:0)

多个值的散列结果因值而异:

有时订单似乎保留:跟随 d_one

的示例

通常,订单不会保留:以下示例 d_two

相信无论如何保持秩序只是因为你被明显保守的特定案件所欺骗

d_one = {}

for i,x in enumerate((122,'xo','roto',885)):
    print x
    d_one[x] = i

print
for k in d_one:
    print k

print '\n=======================\n'

d_two = {}

for i,x in enumerate((122,'xo','roto','taratata',885)):
    print x
    d_two[x] = i

print
for k in d_two:
    print k

结果

122
xo
roto
885

122
xo
roto
885

=======================

122
xo
roto
taratata
885

122
taratata
xo
roto
885

顺便说一下,你所谓的“字典元素”通常被称为“字典的项目”(因此字典的方法items()和iteritems())