在Python中检索单个字典元素

fra*_*fra 3 python dictionary elements sequence

我想只检索词典"e"中的第四项(下面).

我尝试使用OrderedDict()方法,但它没有用.这是我的结果:

from collections import OrderedDict

e = OrderedDict()
e = {'a': 'A',
     'b': 'B',
     'c': 'C',
     'd': 'D',
     'e': 'E'
    }

for k, v in e.items():
    print k, v

print e.items()[3]
Run Code Online (Sandbox Code Playgroud)

最后一行返回:('e','E')

所以我将键和值转换为列表,但是这些列表在我打印时是如何出现的:

['a', 'c', 'b', 'e', 'd']


['A', 'C', 'B', 'E', 'D']
Run Code Online (Sandbox Code Playgroud)

对我来说,这解释了它为什么会发生,但不是如何发生的.

所以,接下来我整理了它们.这给了我正在寻找的结果 - 但它似乎不必要地复杂化:

e = {'a': 'A',
     'b': 'B',
     'c': 'C',
     'd': 'D',
     'e': 'E'
}
k, v = sorted(e.keys()), sorted(e.values())
print "{}: {}".format(k[3], v[3])
Run Code Online (Sandbox Code Playgroud)

结果:d:D

OrderedDict()不是必需的.

有更简单的方法吗?有人可以解释为什么字典中的元素是这样排序的:

keys: 'a', 'c', 'b', 'e', 'd'


values: 'A', 'C', 'B', 'E', 'D'
Run Code Online (Sandbox Code Playgroud)

......这违反了我原来字典的结构?

Eev*_*vee 5

你没有使用有序的字典.

e = OrderedDict()
e = {'a': 'A',
     'b': 'B',
     'c': 'C',
     'd': 'D',
     'e': 'E'
    }
Run Code Online (Sandbox Code Playgroud)

第一行创建了一个OrderedDict.第二行抛弃它并用普通的dict替换它,这是无序的.(Python变量没有类型.)

但你不能这样做:

e = OrderedDict({'a': 'A', ...})
Run Code Online (Sandbox Code Playgroud)

...因为那仍然是一个普通的字典,它仍然是无序的,并且OrderedDict不能神奇地重新创建你原来的源序.

试试这个:

e = OrderedDict([('a', 'A'), ('b', 'B'), ...])
Run Code Online (Sandbox Code Playgroud)

现在你应该有一个类似于dict的对象,你想要的顺序.

并且有人可以解释为什么字典中的元素是这样排序的...这违反了我原始字典的结构?

因为字典是无序的.它们只是哈希映射,而哈希映射没有固有的排序.


请注意,您也可以这样做,这将保留键和值的配对(而不是单独的排序):

print sorted(e.items())[3]
Run Code Online (Sandbox Code Playgroud)

  • @ user1303778:这是一个很长的故事 - 见[这里](http://stackoverflow.com/questions/15479928/why-is-the-order-in-python-dictionaries-and-sets-arbitrary)和[这里] (http://stackoverflow.com/questions/327311/how-are-pythons-built-in-dictionaries-implemented)等摘要. (2认同)