a=[(121, 900), (124, 500), (123, 400), (126, 100)]
b={121: 900, 124: 500, 123: 400, 126: 100}
目标:a转换成b
但是,我用下面的方法:
for i in a:
n[i[0]]=i[1]
print n
结果是这样:{121: 900, 123: 400, 124: 500, 126: 100}
不是原来的顺序了,这个问题如何解决?
a=[(121, 900), (124, 500), (123, 400), (126, 100)]
b={121: 900, 124: 500, 123: 400, 126: 100}
目标:a转换成b
但是,我用下面的方法:
for i in a:
n[i[0]]=i[1]
print n
结果是这样:{121: 900, 123: 400, 124: 500, 126: 100}
不是原来的顺序了,这个问题如何解决?
其实在新的python v3中会默认地保证键插入的有序性,但是这个特性并不保证在未来的版本中不做改变,所以还是:
from collections import OrderedDict
我不会python,还是想说两句。
python的字典是无序的,转换成json格式的时候,一般用json.dumps(dict)完成。这个地方可以根据key来排序,只要加一个参数sort_keys=True,即json.dumps(dict,sort_keys=True),返回的就是排序后字典的json格式,而原本的字典本身就是无序的。
楼主把有序数组转化为有序字典的话,本身就没有意义,因为字典获取value是要通过key的。不过如果你说用items()取出全部value再按顺序访问的话,我也赞同,因为Python的运用本就是没有限制的。
在Python中,dict这个数据结构由于hash的特性,是无序的。而collections的OrderedDict可以为我们提供有序字典,会根据加入的顺序,决定字典中的顺序。
使用方法:
# -*- coding: utf-8 -*-
from collections import OrderedDict
items = (
('A', 1),
('B', 2),
('C', 3)
)
regular_dict = dict(items)
ordered_dict = OrderedDict(items)
print 'Regular Dict:'
for k, v in regular_dict.items():
print k, v
print 'Ordered Dict:'
for k, v in ordered_dict.items():
print k, v
# Result:
Regular Dict:
A 1
C 3
B 2
Ordered Dict:
A 1
B 2
C 3
2 回答3.7k 阅读✓ 已解决
4 回答3.9k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答621 阅读✓ 已解决
1 回答4.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
2 回答2.1k 阅读✓ 已解决