<p>我们可以使用<code>.find</code>获取码字(如果存在),然后使用字典将码字映射到它的代码号。我们可以使用dictionary<code>.get</code>方法返回缺失或未知码字的空代码。如果遇到错误数据,此版本将返回<code>None</code>:名称不包含<code>'-'</code>,或者名称在<code>'-'</code>之前没有8或5个字母。你知道吗</p>
<pre><code>env_code = {
'ICS': '1',
'IGW': '2',
'RTL': '3',
'TDZ': '4',
}
null_code = '9'
def get_env_code(name):
idx = name.find('-')
if idx == 8:
# code may be valid
code = name[idx-3:idx]
elif idx == 5:
# code is missing
code = ''
else:
# Bad name
return None
return env_code.get(code, null_code)
# test
data = [
'AABBBICS-CCCDDD001',
'AABBBIGW-CCCDDD001',
'AABBBRTL-CCCDDD001',
'AABBBTDZ-CCCDDD001',
'USNYCRTL-LANDCE001',
'AABBBXYZ-CCCDDD001',
'AABBB-CCCDDD001',
'BADDATA',
]
for s in data:
print(s, get_env_code(s))
</code></pre>
<p><strong>输出</strong></p>
<pre><code>AABBBICS-CCCDDD001 1
AABBBIGW-CCCDDD001 2
AABBBRTL-CCCDDD001 3
AABBBTDZ-CCCDDD001 4
USNYCRTL-LANDCE001 3
AABBBXYZ-CCCDDD001 9
AABBB-CCCDDD001 9
BADDATA None
</code></pre>
<hr/>
<p>下面是一个更简单的版本,它返回空代码,而不是针对坏数据的<code>None</code>。你知道吗</p>
<pre><code>def get_env_code(name):
idx = name.find('-')
code = name[idx-3:idx] if idx == 8 else ''
return env_code.get(code, null_code)
</code></pre>