2014-02-10 65 views
0

我創建了一些函數來幫助我運行當前的程序。在可能的情況下,我儘可能多地利用這些自定義元素,以保持其數量合理。python 2.7將字典傳遞給.get

至點。

我在下面寫過讓我可以通過各種字典搜索結果是在列表的形式,即人民= {'IR1':[65,'M',77076],'IR2':[24 ,'M',77077],...} IR =唯一人標識 列表中的第1位 - 年齡, 列表中的第2位 - 性別, 列表中的第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則返回「空白」)。 Search =查找值,Source =字典的名稱,Offset =值的位置。 我使用它來支持大約5種不同的字典。

問題: 我有很簡單的字典= {「AA20」:「脊柱硬膜內主要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: 1.我可以寫一個新的功能,但提到我試圖讓他們合理數量的 2.我可以在代碼中使用IF語句這個特定的數據集,但寧願使用TestCustom1(如在毛坯我需要爲所有的數據源相同的輸出):

CusRet = 'Missing from look up tbl' 

,它是更容易,如果需要而改變它在功能上要回這一套(我有超過50個數據源)

問題: 你可能會喜歡上面,也建議替代品將不勝感激(我敢肯定,這是我正在做的一些菜鳥錯誤)。

非常感謝提前。

+0

您應該將您的變量命名爲小寫,因爲大寫字母會反映類名稱。見http://www.python.org/dev/peps/pep-0008/#prescriptive-naming-conventions – linkyndy

+0

看到了,但這是我從MS Excel VBA得到的一個糟糕的習慣。一旦我不是蟒蛇新手,我可能會開始工作:) – dce

回答

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從一開始切片。

但是,請注意,您的功能現在返回兩種不同類型基於匹配;返回一個字符串或一個列表。而是使用例外來交流特殊情況。

+0

Martijn - 謝謝,我需要調整一下你的溶劑,但至少我知道現在要去哪裏:) – dce