"""
在字典中將鍵映射到多個值上
"""
d = {
'a': [1, 2, 3],
'b': [4, 5]
}
# 使用列表來映射可以保留元素插入的順序
e = {
'a': {1, 2, 3},
'b': {4, 5}
}
# 使用集合來影射可以去重且不在意順序
就像我們在其他應用場景比如Django下就常常看到一鍵多值:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day51',
'USER': 'root',
'PASSWORD': '123456',
'HOST': 'localhost',
'PORT': '3306'
}
}
那麼當我們想創建一鍵多值的字典,同時當對字典做迭代或序列化操作時,也能控制其中元素的順序怎麼辦?自帶的collections模塊中OrderedDick就有用處了,顧名思義:
from collections import OrderedDict
import json
d = OrderedDict()
d['foo'] = 1
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4
for key in d:
print(key, d[key])
print(json.dumps(d))
OrderedDick帶來的好處是根據元素加入的順序來排列鍵的位置,但其大小是普通字典的2倍多。如果數據結構相當龐大,就不太合適了。
輸出結果:
foo 1
bar 2
spam 3
grok 4
{"foo": 1, "bar": 2, "spam": 3, "grok": 4}
可見Python的內置和三方模塊真是應有盡有包羅萬象呢。