Skip to main content
 首页 » 编程设计

数组的 Pythonic 映射(初学者)

2025年05月04日10zengkefu

我有一个与初学者 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, 

正如我所提到的,我只是想看到有关以更优雅的方式对此进行编码的建议。 我的第一个猜测是按照 [nato[x] for x in sys.argv[1].lower() if x in nato] 的行使用列表理解,但这不允许我输出任何非字母字符。 我的下一个猜测是使用 map,但我无法格式化任何没有遇到相同极端情况的 lambda。

有什么建议吗?也许有一流的功能?弄乱 Array 的胆量?
这似乎几乎是一个 Code Golf 问题,但我觉得我只是想多了 :)

请您参考如下方法:

字典 get with default也许?

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