特性:依據key被插入的先後做排序,如果更新了某個key的值,不會影響排序位置,除非是把key刪除後又重新插入。後續加入的key都會從最末做添加。
本篇沒做增刪查改的範例。
dict(一般常用的)
一般常用的dict都會說是無序,但其實還是有一定的順序,是按照hash來存儲的,和存儲的數據結構有關(本篇不多說明),但通常這個跟我們一般認真的序列有一點不一樣,因為不是填入時的順序。
example_dict = dict(
name='Bocky',
phone='0912-345-678',
address='Taiwan-Taipei',
age='18'
)
print(example_dict)
輸出結果:
{'phone': '0912-345-678', 'age': '18', 'name': 'Bocky', 'address': 'Taiwan-Taipei'}
OrderedDict
from collections import OrderedDict
import json
# 錯誤示範,沒有照順序排列的效果(與一般dict結果一樣)
example_ordered_dict_0 = OrderedDict(
name='Bocky',
phone='0912-345-678',
address='Taiwan-Taipei',
age='18'
)
print('錯誤示範的輸出:\n{}'.format(example_ordered_dict_0))
print("="*20)
example_ordered_dict_1 = OrderedDict([
('name', 'Bocky'),
('phone_number', '0912-345-678'),
('address', 'Taiwan-Taipei'),
('age', '18')
])
print("OrderedDict輸出結果:\n{}".format(example_ordered_dict_1))
print("="*20)
print("添加一個key為interest到最末端:")
example_ordered_dict_1['interest'] = 'sleep'
print(example_ordered_dict_1)
print("="*20)
print("把OrderedDict轉成字串,並剔除空白:")
print (json.dumps(example_ordered_dict_1).replace(" ", ""))
輸出結果:
錯誤示範的輸出:
OrderedDict([('phone', '0912-345-678'), ('age', '18'), ('name', 'Bocky'), ('address', 'Taiwan-Taipei')])
====================
OrderedDict輸出結果:
OrderedDict([('name', 'Bocky'), ('phone_number', '0912-345-678'), ('address', 'Taiwan-Taipei'), ('age', '18')])
====================
添加一個key為interest到最末端:
OrderedDict([('name', 'Bocky'), ('phone_number', '0912-345-678'), ('address', 'Taiwan-Taipei'), ('age', '18'), ('interest', 'sleep')])
====================
把OrderedDict轉成字串,並剔除空白:
{"name":"Bocky","phone_number":"0912-345-678","address":"Taiwan-Taipei","age":"18","interest":"sleep"}
如果是要a~z排序的話就使用sorted,網路上很多參考,但這就不需要使用OrderedDict了,一般dict就可以做到,只是排序拼接而已,我自己工作上是很常用:
data = "&".join("{0}={1}".format(str(k), str(example_ordered_dict_1[k])) for k in sorted(example_ordered_dict_1.keys()))
輸出結果:
address=Taiwan-Taipei&age=18&interest=sleep&name=Bocky&phone_number=0912-345-678