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