将元组列表转换为python字典而不会丢失顺序

时间:2016-10-24 14:38:02

标签: python dictionary

我尝试将元组列表转换为字典但是当我使用dict()函数执行它时,元素的顺序发生了变化:

l = [('id', 2), ('osm_id', 3), ('sourceid', 4), ('notes', 5), ('ref', 6), ('rtenme', 7), ('ntlclass', 8), ('fclass', 9), ('numlanes', 10), ('srftpe', 11), ('srfcond', 12), ('isseasonal', 13), ('curntprac', 14), ('gnralspeed', 15), ('rdwidthm', 16), ('status', 17), ('bridge', 18), ('iso3', 19), ('country', 20), ('last_updat', 21)]

 dict_l = dict(l)
 print (dict_l)

{'fclass': 9, 'status': 17, 'isseasonal': 13, 'bridge': 18, 'sourceid': 4, 'country': 20, 'notes': 5, 'rtenme': 7, 'iso3': 19, 'last_updat': 21, 'gnralspeed': 15, 'osm_id': 3, 'srfcond': 12, 'numlanes': 10, 'srftpe': 11, 'rdwidthm': 16, 'ref': 6, 'id': 2, 'ntlclass': 8, 'curntprac': 14}

我在这里缺少什么?

我还尝试遍历元组列表并手动构建dict:

c = 0
for key, value in display_order_list_sorted:
    display_order_dict_sorted[display_order_list_sorted[c][0]] = display_order_list_sorted[c][1]
    c = c + 1

我遇到了同样的问题。

2 个答案:

答案 0 :(得分:4)

from collections import OrderedDict
l = [('id', 2), ('osm_id', 3), ('sourceid', 4), ('notes', 5), ('ref', 6), ('rtenme', 7), ('ntlclass', 8), ('fclass', 9), ('numlanes', 10), ('srftpe', 11), ('srfcond', 12), ('isseasonal', 13), ('curntprac', 14), ('gnralspeed', 15), ('rdwidthm', 16), ('status', 17), ('bridge', 18), ('iso3', 19), ('country', 20), ('last_updat', 21)]

dict_l = OrderedDict(l)
print (dict_l)

答案 1 :(得分:2)

Python字典未订购。您需要使用OrderedDict