我想寫一些Python函數生成一個批處理輸入文件,其中有,例如,該塊:蟒蛇下令字典與重複鍵
***behavior
**energy_phase_1
ef_v 10
**energy_phase_2
ef_v 7.
到目前爲止,我是用集合.OrderedDict,因爲訂單在這種輸入文件中很重要)。舉例來說,如果有兩個模擬在我的批處理:
inp_dict['***behavior'] = [ '', '']
inp_dict['**energy_phase_1'] = [ '', '']
inp_dict['**ef_v'] = [ '10', '20']
inp_dict['**energy_phase_2'] = [ '', '']
inp_dict['**ef_v'] = [ '7', '14']
和寫入文件,我只想做這樣的事情:
for s , n in enumerate(sim_list):
......some code...
inp_file.write(' '.join([ key, val[s], '\n' for key, val in inp_dict.items]))
但正如你所看到的,這是不夠的,因爲它在字典中有重複鍵。
所以我的問題是:是否有一個有序的字典,允許重複鍵?例如,如果存在dict ['key'] = 1且dict ['key'] = 2,則第一次調用將返回1和第二次?
或者,有沒有一些聰明和簡單的方法來實現我想要的?
感謝
爲什麼不把dict ['key']保存爲數組,例如[1,2]?然後,您可以爲一個鍵擁有多個值,而不是具有不同值的多個鍵。 –
因爲dict ['key']已經是一個數組了,因爲我有inp_dict ['** ef_v'] = [sim 1的值='10',sim2的值爲'20'],以及inp_dict [ ** ef_v'] = [sim 1的值='7',sim2的值='14'],其中有不同的***塊。 – Napseis
如果真的想要,可以實現一個像所描述的類似字典的對象。您可能繼承ABC的'collections.Mapping'或'collections.MutableMapping',在內部將多值作爲列表字典存儲,並將索引維護到每個列表的最後一個返回元素。但是,在關鍵查找時返回不同的內容感覺很不明確,並且肯定會違反用戶的標準期望。我強烈建議重新思考這個想法。如果你有不同的值,這些鍵是否真的相同?你能做一個簡單的列表字典並迭代返回的列表嗎? –