Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,并且没有明显的方法从字典中获取特定元素_Python_Dictionary - Fatal编程技术网

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

Python,并且没有明显的方法从字典中获取特定元素,python,dictionary,Python,Dictionary,为什么我可以在Python中轻松地执行for循环,按照我附加元素的顺序遍历字典的所有元素,但没有明显的方法访问特定元素?当我说element时,我指的是一个键+值对 我已经浏览了一些关于Python的基本教程在字典上的内容,但没有一个能回答我的问题,我也无法在docs.Python.org中找到我的答案 根据: (Senderies comment)dict应该是无序的,但是为什么for循环会按照我放置它们的顺序打印它们呢?Python dict是通过散列键访问的。因此,如果你有任何一种相当大的

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

我已经浏览了一些关于Python的基本教程在字典上的内容,但没有一个能回答我的问题,我也无法在docs.Python.org中找到我的答案

根据:
(Senderies comment)dict应该是无序的,但是为什么for循环会按照我放置它们的顺序打印它们呢?

Python dict是通过散列键访问的。因此,如果你有任何一种相当大的dict,并且事情是按照你放入它们的顺序出现的,那么是时候开始赌彩票了

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

Python dict是通过散列键来访问的。因此,如果你有任何一种相当大的dict,并且事情是按照你放入它们的顺序出现的,那么是时候开始赌彩票了

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

可以通过键访问字典中的特定元素。这就是字典。如果这种行为不是你想要的,那就用字典以外的东西

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

巧合:基本上,您碰巧按照Python喜欢的顺序放置了它们。这并不难做到,特别是对于整数(
int
s是它们自己的散列,并且倾向于以升序数字顺序从dict中产生,尽管这是CPython的一个实现细节,在其他Python实现中可能不太正确),尤其是如果您首先将它们以数字顺序放置

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


如果您需要能够通过数字索引访问字典元素,有很多方法可以做到这一点<代码>集合。OrderedDict是标准方式;键总是按照您添加它们的顺序返回,因此您可以始终执行
foo[foo.keys()[i]]
来访问
i
th元素。您还可以使用其他方案。

通过键访问字典中的特定元素。这就是字典。如果这种行为不是你想要的,那就用字典以外的东西

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
一个dict应该是无序的,但是为什么for循环按照我输入的顺序打印它们呢

巧合:基本上,您碰巧按照Python喜欢的顺序放置了它们。这并不难做到,特别是对于整数(
int
s是它们自己的散列,并且倾向于以升序数字顺序从dict中产生,尽管这是CPython的一个实现细节,在其他Python实现中可能不太正确),尤其是如果您首先将它们以数字顺序放置

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


如果您需要能够通过数字索引访问字典元素,有很多方法可以做到这一点<代码>集合。OrderedDict是标准方式;键总是按照您添加它们的顺序返回,因此您可以始终执行
foo[foo.keys()[i]]
来访问
i
th元素。您还可以使用其他方案。

如果您想按插入顺序遍历项目,应该使用。一个普通的口述不能保证做同样的事情,所以如果你依赖它来做的话,你就是在自找麻烦

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

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

如果您想按插入顺序遍历项目,应该使用。一个普通的口述不能保证做同样的事情,所以如果你依赖它来做的话,你就是在自找麻烦


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

对多个值进行哈希运算的结果因值而异:

有时,顺序似乎得到了遵守:下面是带有d_one的示例

通常情况下,不遵守顺序:下面的示例使用du 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()方法)

对几个值进行哈希运算的结果根据值的不同而不同:

有时,顺序似乎得到了遵守:下面是带有d_one的示例

通常情况下,不遵守顺序:下面的示例使用du 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()方法)

那么你现在的问题是什么?关于循环行为或访问元素?我可能是,为键生成的散列以插入键的相同顺序出现……如果您以相同的顺序对元素进行迭代,我会说您很幸运。我相信您一定会以相同的方式迭代它们