通过在有序的字典中分割字符串来创建一个字典

时间:2014-08-05 17:11:54

标签: python

我有一个有序的字典表示字段定义,即名称,类型,宽度,精度

它看起来像这样:

 OrderedDict([(u'CODE_MUN', 'str:8'), (u'CODE_DR_AN', 'str:8'),
 (u'AREA', 'float:31.2'), (u'PERIMETER', 'float:31.4')])

我想为每个项目创建一个dict:

对于没有精确度的字段

{'name' : 'CODE_MUN', 'type': 'str', 'width': 8, 'precision':0}

{'name' : 'AREA', 'type': 'float', 'width': 31, 'precision':2 }对于精确的fiels

for keys, values in fieldsDict.iteritems():
   dict = {}
   dict['name'] = keys
   props = re.split(':.', values)
   dict['type'] = props[0]
   dict['width'] = props[1]
   dict['precision'] = props[2]

当然没有定义精度时我有索引错误。实现这一目标的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

您必须检查precision是否存在。

from collections import OrderedDict
import re

fieldsDict = OrderedDict([(u'CODE_MUN', 'str:8'), (u'CODE_DR_AN', 'str:8'),
 (u'AREA', 'float:31.2'), (u'PERIMETER', 'float:31.4')])

for keys, values in fieldsDict.iteritems():
   dict = {}
   dict['name'] = keys
   props = re.split(':.', values)
   dict['type'] = props[0]
   dict['width'] = props[1]
   if len(props) == 3:
       dict['precision'] = props[2]
   else:
       dict['precision'] = 0
   print dict

这可能有帮助

答案 1 :(得分:1)

使用try-except块。

for keys, values in fieldsDict.iteritems():
    dict = {}
    dict['name'] = keys
    props = re.split(':.', values)
    dict['type'] = props[0]
    dict['width'] = props[1]

    try:
        dict['precision'] = props[2]
    except IndexError:
        dict['precision'] = 0

您还可以使用if-else块测试长度。这些方法非常接近,我怀疑这是一个真正重要的情况,但更多关于提问forgiveness vs permission的问题,你可以看到this question