我有一个字典,我以特定的顺序声明,并希望一直保持这个顺序。键/值不能根据它们的值来排列顺序,我只想让它按照我声明它的顺序排列。
如果我有字典
d = {'ac': 33, 'gw': 20, 'ap': 102, 'za': 321, 'bs': 10}
如果我查看或遍历它,它就不是这个顺序了。是否有任何方法确保Python将保持我声明键/值的显式顺序?
我有一个字典,我以特定的顺序声明,并希望一直保持这个顺序。键/值不能根据它们的值来排列顺序,我只想让它按照我声明它的顺序排列。
如果我有字典
d = {'ac': 33, 'gw': 20, 'ap': 102, 'za': 321, 'bs': 10}
如果我查看或遍历它,它就不是这个顺序了。是否有任何方法确保Python将保持我声明键/值的显式顺序?
当前回答
from collections import OrderedDict
OrderedDict((word, True) for word in words)
包含
OrderedDict([('He', True), ('will', True), ('be', True), ('the', True), ('winner', True)])
如果值为True(或任何其他不可变对象),你也可以使用:
OrderedDict.fromkeys(words, True)
其他回答
from collections import OrderedDict
OrderedDict((word, True) for word in words)
包含
OrderedDict([('He', True), ('will', True), ('be', True), ('the', True), ('winner', True)])
如果值为True(或任何其他不可变对象),你也可以使用:
OrderedDict.fromkeys(words, True)
字典会使用一个让搜索更有效率的顺序,这是你无法改变的,
您可以只使用对象列表(在简单情况下是2元素元组,甚至是类),并将项附加到末尾。然后,您可以使用线性搜索在其中查找项目。
或者,您可以创建或使用为维护秩序而创建的不同数据结构。
另一种替代方法是使用Pandas数据框架,因为它保证了类字典结构中条目的顺序和索引位置。
from collections import OrderedDict
list1 = ['k1', 'k2']
list2 = ['v1', 'v2']
new_ordered_dict = OrderedDict(zip(list1, list2))
print new_ordered_dict
# OrderedDict([('k1', 'v1'), ('k2', 'v2')])
一般来说,你可以设计一个行为类似于字典的类,主要实现方法__contains__, __getitem__, __delitem__, __setitem__等等。这个类可以有任何你喜欢的行为,例如在键上提供一个排序的迭代器……