[英]python ordered dict with duplicates keys
我正在嘗試編寫一些python函數來生成一批輸入文件,例如,其中包含以下代碼塊:
***behavior
**energy_phase_1
ef_v 10
**energy_phase_2
ef_v 7.
到目前為止,我正在使用collections.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? 例如,如果存在dict ['key'] = 1和dict ['key'] = 2,則第一個調用將返回1,第二個返回2?
或者,是否有一些聰明而簡單的方法來實現我想要的?
謝謝
重復鍵的概念與dict的概念背道而馳。
如果您需要維護順序並有重復的鍵,我會說您需要使用其他數據結構。 一種可能的解決方案是使用元組列表。 類似於以下內容:
inp = list()
# Define your input as a list of tuples instead of as a dict
inp.append(('***behavior', ('', '')))
inp.append(('**energy_phase_1', ('', '')))
inp.append(('**ef_v', ('10', '20')))
inp.append(('**energy_phase_2', ('', '')))
inp.append(('**ef_v', ('7', '14')))
# You can have duplicate keys on the list and the order is preserved
output = "\n".join(["{key} {val}".format(key=t[0], val=t[1][0]).strip() for t in inp])
在這種情況下, output
變量將包含:
***behavior
**energy_phase_1
**ef_v 10
**energy_phase_2
**ef_v 7
如果您需要通過鍵(類似於dict的功能)訪問值,則可以使用以下方法:
def get_key_values(inp, key):
filtr_by_key = filter(lambda t: True if t[0] == key else False, inp)
return filtr_by_key
ef_v_values = get_key_values(inp, "**ef_v")
在這種情況下, ef_v_values
僅包含與鍵**ef_v
相關聯的值:
[('**ef_v', ('10', '20')), ('**ef_v', ('7', '14'))]
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.