簡體   English   中英

python命令字典重復鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM