如何将Python中的字典编入索引?

时间:2016-06-25 16:44:43

标签: python dictionary

我的印象是字典没有编入索引。但是当在两个词典上使用d1={'a'=1,'b'=2} d2={'c'=1,'d'=2} 时,它会返回指向其他结果的结果。 例如:

zip(d1,d2)
Python 2中的

[('a', 'c'),('b', 'd')] 将始终返回

{{1}}

任何人都可以解释列表的索引和存储吗?

1 个答案:

答案 0 :(得分:3)

使用哈希表实现字典。所有这些数据结构都不能对密钥的顺序提供任何保证。例如:

>>> import string
>>> d1 = {}
>>> for letter in string.ascii_lowercase:
...     d1[letter] = 1
... 
>>> d2 = {}
>>> for letter in reversed(string.ascii_lowercase):
...     d2[letter] = 1
... 
>>> d1 == d2
True
>>> print(list(d1), list(d2), list(zip(d1, d2)), sep='\n')
['u', 'f', 'm', 'x', 'n', 'k', 'q', 't', 'e', 'r', 'j', 'd', 'o', 'b', 'g', 'c', 'z', 'v', 'y', 'a', 'i', 'l', 's', 'p', 'w', 'h']
['u', 'f', 'm', 'x', 'n', 'k', 't', 's', 'q', 'j', 'd', 'e', 'o', 'b', 'g', 'c', 'z', 'v', 'y', 'a', 'i', 'l', 'p', 'h', 'w', 'r']
[('u', 'u'), ('f', 'f'), ('m', 'm'), ('x', 'x'), ('n', 'n'), ('k', 'k'), ('q', 't'), ('t', 's'), ('e', 'q'), ('r', 'j'), ('j', 'd'), ('d', 'e'), ('o', 'o'), ('b', 'b'), ('g', 'g'), ('c', 'c'), ('z', 'z'), ('v', 'v'), ('y', 'y'), ('a', 'a'), ('i', 'i'), ('l', 'l'), ('s', 'p'), ('p', 'h'), ('w', 'w'), ('h', 'r')]

请注意并非所有键都匹配。

顺序取决于字典的历史。我相信默认情况下,python会创建可以存储8个项目的对象,之后必须增加表的大小并且必须移动元素,从而改变顺序。因此,如果您使用非常小的字典,其中的键不会导致冲突,则最终会产生一致的顺序,但这只是一个实现细节。

每当您添加/删除一些项目时,您都会看到订单分歧。

举一个订单变更的例子,请看:

>>> d3 = {}
>>> for letter in string.ascii_lowercase:
...     d3[letter] = 1
...     print(list(d3))
... 
['a']
['a', 'b']
['a', 'b', 'c']
['a', 'b', 'c', 'd']
['a', 'b', 'e', 'c', 'd']
['a', 'b', 'e', 'd', 'c', 'f']
['a', 'b', 'g', 'e', 'd', 'c', 'f']
['a', 'b', 'g', 'e', 'd', 'c', 'f', 'h']
['a', 'b', 'g', 'e', 'i', 'd', 'c', 'f', 'h']
['a', 'b', 'g', 'e', 'i', 'd', 'c', 'j', 'f', 'h']
['a', 'b', 'g', 'e', 'i', 'd', 'c', 'j', 'f', 'k', 'h']
['b', 'g', 'c', 'f', 'k', 'a', 'i', 'e', 'j', 'l', 'd', 'h']
['b', 'g', 'c', 'f', 'm', 'k', 'a', 'i', 'e', 'j', 'l', 'd', 'h']
['b', 'g', 'c', 'f', 'm', 'n', 'k', 'a', 'i', 'e', 'j', 'l', 'd', 'h']
['b', 'g', 'c', 'f', 'm', 'n', 'k', 'a', 'i', 'e', 'j', 'l', 'd', 'o', 'h']
['b', 'g', 'c', 'f', 'm', 'n', 'k', 'a', 'i', 'e', 'j', 'l', 'd', 'p', 'o', 'h']
['b', 'g', 'c', 'f', 'm', 'n', 'k', 'a', 'i', 'e', 'q', 'j', 'l', 'd', 'p', 'o', 'h']
['b', 'g', 'c', 'f', 'm', 'n', 'k', 'a', 'i', 'e', 'r', 'q', 'j', 'l', 'd', 'p', 'o', 'h']
['b', 'g', 'c', 'f', 'm', 'n', 'k', 'a', 'i', 'e', 'r', 'q', 'j', 'l', 'd', 'p', 's', 'o', 'h']
['b', 'g', 'c', 'f', 'm', 'n', 'k', 'a', 'i', 't', 'e', 'r', 'q', 'j', 'l', 'd', 'p', 's', 'o', 'h']
['b', 'g', 'c', 'f', 'm', 'u', 'n', 'k', 'a', 'i', 't', 'e', 'r', 'q', 'j', 'l', 'd', 'p', 's', 'o', 'h']
['u', 'f', 'm', 'n', 'k', 'q', 't', 'e', 'r', 'j', 'd', 'o', 'b', 'g', 'c', 'v', 'a', 'i', 'l', 's', 'p', 'h']
['u', 'f', 'm', 'n', 'k', 'q', 't', 'e', 'r', 'j', 'd', 'o', 'b', 'g', 'c', 'v', 'a', 'i', 'l', 's', 'p', 'w', 'h']
['u', 'f', 'm', 'x', 'n', 'k', 'q', 't', 'e', 'r', 'j', 'd', 'o', 'b', 'g', 'c', 'v', 'a', 'i', 'l', 's', 'p', 'w', 'h']
['u', 'f', 'm', 'x', 'n', 'k', 'q', 't', 'e', 'r', 'j', 'd', 'o', 'b', 'g', 'c', 'v', 'y', 'a', 'i', 'l', 's', 'p', 'w', 'h']
['u', 'f', 'm', 'x', 'n', 'k', 'q', 't', 'e', 'r', 'j', 'd', 'o', 'b', 'g', 'c', 'z', 'v', 'y', 'a', 'i', 'l', 's', 'p', 'w', 'h']

正如您在['a', 'b', 'e', 'c', 'd']添加f订单已更改为['a', 'b', 'e', 'd', 'c', 'f']时所看到的,请参阅cd的交换方式?所有其他字母等等,直到最后以u结尾。