数组的Pythonic映射(初学者)

sco*_*ana 1 python arrays

我有一个与我编写的初学者Python片段有关的问题,以向我自己介绍该语言.这是一个公认的微不足道的早期努力,但我仍然想知道我怎么能更优雅地写它.

该程序输出一个参数的北约光学可读版本,如"H2O" - >"Hotel 2 Oscar",或(缺少一个参数)只输出整个字母表.我主要使用它来调用MAC地址和IQN,但它对其他电话支持也很有用.

这是该计划相关部分的主体:

#!/usr/bin/env python

import sys

nato = {
"a": 'Alfa',
"b": 'Bravo',
"c": 'Charlie',
"d": 'Delta',
"e": 'Echo',
"f": 'Foxtrot',
"g": 'Golf',
"h": 'Hotel',
"i": 'India',
"j": 'Juliet',
"k": 'Kilo',
"l": 'Lima',
"m": 'Mike',
"n": 'November',
"o": 'Oscar',
"p": 'Papa',
"q": 'Quebec',
"r": 'Romeo',
"s": 'Sierra',
"t": 'Tango',
"u": 'Uniform',
"v": 'Victor',
"w": 'Whiskey',
"x": 'Xray',
"y": 'Yankee',
"z": 'Zulu',
}

if len(sys.argv) < 2:
    for n in nato.keys():
            print nato[n]
else:
    # if sys.argv[1] == "-i" # TODO
    for char in sys.argv[1].lower():
            if char in nato:
                    print nato[char],
            else: print char,
Run Code Online (Sandbox Code Playgroud)

正如我所提到的,我只想看到更优雅的方式来编写代码的建议.我的第一个猜测是使用列表理解[nato[x] for x in sys.argv[1].lower() if x in nato],但这不允许我输出任何非字母字符.我的下一个猜测是使用map,但我无法格式化任何没有遭受同一个角落情况的lambdas.

有什么建议?也许具有一流功能的东西?与Array的胆量混淆?
这似乎几乎可以成为Code Golf的问题,但我觉得我只是在思考问题:)

ext*_*eon 5

dict 默认得到了 吗?

for char in sys.argv[1].lower():
  print nato.get(char, char) # try to get nato[char] otherwise return char
Run Code Online (Sandbox Code Playgroud)