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)
......这违反了我原来字典的结构?
你没有使用有序的字典.
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)