有关优化此脚本的任何想法? (蟒蛇)

时间:2010-01-05 20:34:36

标签: python unicode

我正在编写一个小脚本来帮助我学习日语假名(平假名/片假名)。总共有100多个(+ || - )。

基本上,它所做的就是接受英文版并将其转换为角色。

即。 a ='あ',十进制为12354

到目前为止我所拥有的是:

hiraDict = { "a" : 12354, "i" : 12356 ...}

if __name__ == "__main__":
    if hiraDict.has_key(sys.argv[1]):
      print(unichr(hiraDict[sys.argv[1]]))

有100多个字符,这可行吗?还是有更好的方法来解决这个问题?

4 个答案:

答案 0 :(得分:5)

如果您不想要例外,则无需检查是否存在,只需获取它并提供默认参数:

# -*- coding: utf-8 -*-
import sys
hiraDict = {'a': 'あ', 'i': 'い', }
print(hiraDict.get(sys.argv[1], None))

...和python 2.x:

# -*- coding: utf-8 -*-
import sys
hiraDict = {'a': u'あ', 'i': u'い', }
print hiraDict.get(sys.argv[1], None)

[edit]我刚注意到你想为很多角色做这件事。以下内容将允许您打印出一系列作为参数给出的字符(python 3 +):

# -*- coding: utf-8 -*-
import sys
hiraDict = {ord('a'): 'あ', ord('i'): 'い' }
text = " ".join(sys.argv[1:])
print(text.translate(hiraDict))

答案 1 :(得分:3)

根据PEP 263放置编码标题,然后直接使用字符:

# -*- coding: utf-8 -*-
hiraDict = {'a': u'あ', 'i': u'い', ...}

答案 2 :(得分:1)

来自文档:

  

对象的has_key(key)的

     

测试字典中是否存在密钥。 has_key()是   在d。

中赞成使用key

重写为

if sys.argv[1] in hiraDict:

答案 3 :(得分:1)

不仅100,这也适用于100k字符。

所以不必担心真正优化性能,除非你每秒数千次使用这个例程,你可能不会这样做。