python 2.7将参数传递给.get的字典

时间:2014-02-10 13:01:11

标签: python python-2.7 dictionary

我创建了许多函数来帮助我运行当前的程序。在可能的情况下,我试图尽可能多地利用这些自定义元素,以保持其数量相当合理。

重点。

我在下面写过,允许我搜索各种词典,其结果是列表形式,即People = {'IR1':[65,'M',77076],'IR2':[24,' M',77077],....} IR =唯一身份标识符 列表中的第一个位置 - AGE, 名单中的第二位 - 性别, 列表中的第3个位置 - GP练习代码。

获取我正在使用的每个必要值:

def TestCustom1(Search, Source, Offset):

    if Search == 'Blank' or Search == 'Missing IRF - MT' or \
    Search == 'Missing IRF - source data' or Search is None or \
    Search == 'Date out of scope':
        CusRet = 'Blank'

    elif Source.get(Search) is not None:
        CusRet = TestType('CharZ', Source.get(Search)[Offset])

    else:
        CusRet = 'Missing from look up tbl'

    return CusRet

其中: TestType,评估结果(即如果值为Null则返回'Blank')。 Search =查找值,Source = Dictionary的名称,Offset = value position。 我用它来支持大约5种不同的词典。

问题: 我有非常简单的Dictionary = {'AA20':'Intradral Spine Major 1',.....}

在编辑器中使用以下内容时,一切正常:

DictHRG.get('HC08Z')[0:]
u'Intradural Spine Major 1'

但是当试图将[0:]传递给我所做的函数时,出现了错误:

TestCustom1('HC08Z', DictHRG, 0:)
SyntaxError: invalid syntax

TestCustom1('HC08Z', DictHRG, [0:])
SyntaxError: invalid syntax

Sollution: 我可以写一个新函数,但正如我所说的那样,我试图保留一定数量的函数 2.我可以在这个特定数据集的代码中使用IF语句,但更喜欢使用TestCustom1(就像空白一样,我需要为所有数据源提供相同的输出):

CusRet = 'Missing from look up tbl'

如果需要的话,更容易在函数中更改它,而不是回到这一组(我有超过50个数据源)

问题: 您是否可能对上述情况表示赞赏,也非常感谢对替代品的建议(我很确定这是我正在做的一些新手错误)。

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

您可以在切片中使用偏移量:

CusRet = TestType('CharZ', Source.get(Search)[Offset:])

或传递slice() object作为偏移量:

TestCustom1('HC08Z', DictHRG, slice(0))

请注意,0是切片的默认起点。

只需使用成员资格测试测试密钥即可简化您的代码:

def TestCustom1(Search, Source, Offset=0):
    if Search is None or Search in (
            'Blank', 'Missing IRF - MT', 'Missing IRF - source data',
            'Date out of scope'):
        return 'Blank'

    if Search in Source:
        return TestType('CharZ', Source[Search][Offset:])

    return 'Missing from look up tbl'

其中假设Offset是一个整数,默认为0从一开始就切片。

但请注意,您的函数现在会根据匹配返回两种不同类型;返回字符串或列表。使用例外来代表特殊情况。