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

python 2.7字典将参数传递给.get,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,我创建了许多函数来帮助我运行当前的程序。在可能的情况下,我会尽可能多地利用这些自定义元素,以保持它们的数量相当合理 切中要害 我写了下面的内容,以允许我在各种字典中搜索结果是列表形式的,即People={'IR1':[65',M',77076],'IR2':[24',M',77077],…} IR=唯一的个人标识符 排名第一的是年龄, 排名第二——性别, 列表中的第三个位置-GP实践代码 要获取我正在使用的每个必要值,请执行以下操作: def TestCustom1(Search, Source

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

切中要害

我写了下面的内容,以允许我在各种字典中搜索结果是列表形式的,即People={'IR1':[65',M',77076],'IR2':[24',M',77077],…} IR=唯一的个人标识符 排名第一的是年龄, 排名第二——性别, 列表中的第三个位置-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”。 搜索=查找值,源=字典名称,偏移量=值位置。 我用它来支持大约5种不同的字典

问题: 我有一个非常简单的字典={'AA20':'intra-dural Spine Major 1',…}

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

DictHRG.get('HC08Z')[0:]
u'Intradural Spine Major 1'
但是,当尝试将[0:]传递到我创建的函数中时,出现错误:

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

解决方案: 1.我可以编写一个新函数,但正如前面提到的,我正试图保持一个合理的数量 2.对于这个特定的数据集,我可以在代码中使用IF语句,但更愿意使用TestCustom1,因为我需要对所有数据源使用相同的输出:

CusRet = 'Missing from look up tbl'
如果需要,更容易在函数中更改它,而不是返回到这个集合我有50多个数据源

问题: 你能不能同意上面的说法,另外,如果你能给我一些建议,我将不胜感激。我很确定这是我犯的新手错误


非常感谢。您可以在切片中使用偏移:

CusRet = TestType('CharZ', Source.get(Search)[Offset:])
或为偏移量传入一个:

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'
其中,假定偏移量为整数,默认为0以从起点开始切片


但是,请注意,函数现在根据匹配返回两种不同的类型;返回字符串或列表。使用异常来传达异常情况。

Martijn-谢谢你,我需要稍微调整一下你的解决方案,但至少我现在知道该怎么做了:你应该用小写字母来命名变量,因为大写字母反映类名。看到了吧,但这是我从微软Excel VBA得到的一个坏习惯。一旦我不是python新手,我可能会开始研究它:
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'