我有一个字典,我以特定的顺序声明,并希望一直保持这个顺序。键/值不能根据它们的值来排列顺序,我只想让它按照我声明它的顺序排列。
如果我有字典
d = {'ac': 33, 'gw': 20, 'ap': 102, 'za': 321, 'bs': 10}
如果我查看或遍历它,它就不是这个顺序了。是否有任何方法确保Python将保持我声明键/值的显式顺序?
我有一个字典,我以特定的顺序声明,并希望一直保持这个顺序。键/值不能根据它们的值来排列顺序,我只想让它按照我声明它的顺序排列。
如果我有字典
d = {'ac': 33, 'gw': 20, 'ap': 102, 'za': 321, 'bs': 10}
如果我查看或遍历它,它就不是这个顺序了。是否有任何方法确保Python将保持我声明键/值的显式顺序?
当前回答
你不能用字典做任何你想做的事。您已经创建了字典d = {'ac':33, 'gw':20, 'ap':102, 'za':321, 'bs':10}。我发现一旦它已经创建,就没有办法保持秩序。我所做的是用对象创建一个json文件:
{"ac":33,"gw":20,"ap":102,"za":321,"bs":10}
我使用:
r = json.load(open('file.json'), object_pairs_hook=OrderedDict)
然后使用:
print json.dumps(r)
来验证。
其他回答
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
list1 = ['k1', 'k2']
list2 = ['v1', 'v2']
new_ordered_dict = OrderedDict(zip(list1, list2))
print new_ordered_dict
# OrderedDict([('k1', 'v1'), ('k2', 'v2')])
注意,这个答案适用于python3.7之前的python版本。CPython 3.6在大多数情况下维护插入顺序作为实现细节。从Python3.7开始,已经声明实现必须保持插入顺序才能兼容。
Python字典是无序的。如果你想要一个有序的字典,试试collections.OrderedDict。
注意,OrderedDict是在python 2.7中引入到标准库中的。如果你有一个较旧版本的python,你可以在ActiveState上找到有序字典的菜谱。
如果您希望以特定顺序使用字典,还可以创建一个列表的列表,其中第一项将是键,第二项将是值 就像这样 例子
>>> list =[[1,2],[2,3]]
>>> for i in list:
... print i[0]
... print i[1]
1
2
2
3
你可以做和我为字典做的一样的事情。
创建一个列表和空字典:
dictionary_items = {}
fields = [['Name', 'Himanshu Kanojiya'], ['email id', 'hima@gmail.com']]
l = fields[0][0]
m = fields[0][1]
n = fields[1][0]
q = fields[1][1]
dictionary_items[l] = m
dictionary_items[n] = q
print dictionary_items