I\'m trying to write some python functions to generate a batch of input files, in which there is, for instance, this block:
***behavior
**energy_phase_1
ef_v 10
The concept of duplicate key goes against the concept of dict.
If you need to maintain order and have duplicate keys I'd say you need to use another data structure. One possible solution would be using a list of tuples. Something like the following:
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])
In this case the output
variable would contain:
***behavior
**energy_phase_1
**ef_v 10
**energy_phase_2
**ef_v 7
If you need to access values by key (a dict-like functionality) you could use something like this:
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")
In this case the ef_v_values
would contain only the values associated with the key **ef_v
:
[('**ef_v', ('10', '20')), ('**ef_v', ('7', '14'))]
Hope this helps.