从字典创建字典作为可迭代

时间:2017-03-08 04:01:51

标签: python parsing dictionary

我正在开发一个简单的解析器,其中订单/索引很重要。但是,每个条目都有许多Null值,所以为了节省空间,我想删除它们。为了维护订单/索引信息,我试图在字典中创建一个字典,其中内部字典的键是“外部字典的键+索引”。

它始于一个长字符串:

'Blue|periwinkle|power|morning|cyan\nPurple|indigo|violet|royal|electric\nred|rogue|mauve|wine|magenta\nyellow|gold|amber|flax|mustard'

所以我把文件打开到python中并将字符串拆开如下:

with open('example1.hl7', 'r') as message:
    for i,line in enumerate(message):
        line = line.split('|', 1)
        linekey = line[0]
        line = {linekey + str(i + 1): line[1]}
        line = {key: list(map(str, value.split('|'))) for key, value in line.items()}

这给了我这个:

{'Blue': ['periwinkle', 'power', 'morning', 'cyan'],
'Purple': ['indigo', 'violet', 'royal', 'electric'],
'red': ['rogue', 'mauve', 'wine', 'magenta'],
'yellow': ['gold', 'amber', 'flax', 'mustard']}

我想我需要在下一部分使用map(),但无法弄清楚要调用哪个函数来正确格式化字典以及如何引用外键。我将外键命名为使其更容易调用,但我仍然坚持添加索引并使其成为内部字典的关键。我最终想要的是:

{'Blue': 
    {'Blue1': 'periwinkle', 'Blue2': 'power', 'Blue3': 'morning', 'Blue4': 'cyan'},
'Purple':
    {'Purple1': 'indigo', 'Purple2': 'violet', 'Purple3': 'royal', 'Purple4': 'electric'},
'Red':
    {'Red1': 'rogue', 'Red2': 'mauve', 'Red3': 'wine', 'Red4': 'magenta'},
'Yellow':
    {'Yellow1': 'gold', 'Yellow2': 'amber', 'Yellow3': 'flax', 'Yellow4': 'mustard'}
}

1 个答案:

答案 0 :(得分:0)

试试这个。
我将长字符串放在文件example1.hl7中。

outer_dict = {}

with open('example1.hl7', 'r') as _file:
    line = _file.read()

for i in line.strip().split('\n'):
    values = i.split('|')
    outer_key = values[0]
    outer_dict[outer_key] = {"{}{}".format(outer_key, index+1): j
                             for index, j in enumerate(values[1:])}
print outer_dict

注意:假设长字符串格式不会改变)