简单的list-dict函数

时间:2014-07-10 14:45:39

标签: list python-3.x dictionary codec python-unicode

我正在尝试编写一个简单的程序,以模拟一个简单的总线与一些站点进行交换。我使用2个列表作为公共汽车站和一个线路的字典:公共汽车站 这是代码

`def main():

    lineA = ["Stazione Autolinee","Via Romagnoli","Via E.Filiberto", \
            "Piazza del popolo" , "Via Cattaneo", "Via Pio VI", "P.Le Prampolini", \
            "Via dei Mille", "Via Villafranca","Via Romagnoli", "Viale Kennedy", \
            "Via Mosca","Via Bucarest","Via U.Zani","Via Kennedy","Via Bruxelles", \
            "Via Bachelet","Via Mazzocchi Alemanni","Via Sant'Agostino", "V.Le P.L. Nervi", \
            "Via Milano" , "Via Palermo" , "Via Mazzocchi Alemanni" , "Via Sant’Agostino", \
            "Via Del Lido" , "Via Garigliano" , "Via Pio VI" , "C.so della Repubblica", \
            "Piazza del Popolo" , "Via C. Battisti" , "Via E. Filiberto" , "Via Romagnoli", \
            "Stazione Autolinee"]
    lineB = ["Stazione Autolinee" , "Via Romagnoli" , "Via E. Filiberto" , "Piazza del Popolo", \
            "Via Diaz" , "V.Le Don Morosini" , "V.Le Mazzini" , "Viale dello Statuto" , \
            "Via Virgilio" , "Via Terenzio" , "V.Le Petrarca" , "Via dei Volsci" , "Via Don Torello" , \
            "Via S.Francesco D\'Assisi" , "Via Pantanaccio" , "Via Epitaffio" , "Via M. Terminillo" , \
            "Via G.S. d\' Italia" , "Via Pionieri della Bonifica" , "P.Le Carturan" , "Via Carturan" , \
            "Corso della Repubblica" , "Via C. Battisti" , "C.so Matteotti" , "Piazza del Popolo" , \
            "Corso Della Repubblica" , "Via C. Battisti" , "Via E. Filiberto" , "Stazione Autolinee"]
    diz = {"Line A":lineA, "Line B":lineB}
    for key in diz:
        for ele in diz[key]:
            print(key, ele)
`

那就是输出

Line A Stazione Autolinee
Line A Via Romagnoli
Line A Via E.Filiberto
Line A Piazza del popolo
Line A Via Cattaneo
Line A Via Pio VI
Line A P.Le Prampolini
Line A Via dei Mille
Line A Via Villafranca
Line A Via Romagnoli
Line A Viale Kennedy
Line A Via Mosca
Line A Via Bucarest
Line A Via U.Zani
Line A Via Kennedy
Line A Via Bruxelles
Line A Via Bachelet
Line A Via Mazzocchi Alemanni
Line A Via Sant'Agostino
Line A V.Le P.L. Nervi
Line A Via Milano
Line A Via Palermo
Line A Via Mazzocchi Alemanni
Line A Traceback (most recent call last):
  File "BUS.py", line 30, in <module>
    main()
  File "BUS.py", line 29, in main
    print(key, ele)
  File "C:\Python34\lib\encodings\cp850.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2019' in position
8: character maps to <undefined>
Premere un tasto per continuare . . .

我无法理解错误“编码” 有人可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

首先,在定义列表内容时不需要连续反斜杠。

你的程序很好。也许源代码存储在UTF-8中,而Python正确地使用它。

在我看来,问题在于print命令与输出到控制台窗口的组合。 Microsoft控制台窗口在您的情况下使用cp850编码,并且无法显示特殊字符。 (更好的说,Python发现控制台使用编码而Python无法转换控制台窗口的输出。)尝试以下修改,将输出写入文件:

#!python3
lineA = ["Stazione Autolinee","Via Romagnoli","Via E.Filiberto", 
        "Piazza del popolo" , "Via Cattaneo", "Via Pio VI", "P.Le Prampolini", 
        "Via dei Mille", "Via Villafranca","Via Romagnoli", "Viale Kennedy", 
        "Via Mosca","Via Bucarest","Via U.Zani","Via Kennedy","Via Bruxelles", 
        "Via Bachelet","Via Mazzocchi Alemanni","Via Sant'Agostino", "V.Le P.L. Nervi", 
        "Via Milano" , "Via Palermo" , "Via Mazzocchi Alemanni" , "Via Sant’Agostino", 
        "Via Del Lido" , "Via Garigliano" , "Via Pio VI" , "C.so della Repubblica", 
        "Piazza del Popolo" , "Via C. Battisti" , "Via E. Filiberto" , "Via Romagnoli", 
        "Stazione Autolinee"]
lineB = ["Stazione Autolinee" , "Via Romagnoli" , "Via E. Filiberto" , "Piazza del Popolo", 
        "Via Diaz" , "V.Le Don Morosini" , "V.Le Mazzini" , "Viale dello Statuto" , 
        "Via Virgilio" , "Via Terenzio" , "V.Le Petrarca" , "Via dei Volsci" , "Via Don Torello" , 
        "Via S.Francesco D'Assisi" , "Via Pantanaccio" , "Via Epitaffio" , "Via M. Terminillo" , 
        "Via G.S. d' Italia" , "Via Pionieri della Bonifica" , "P.Le Carturan" , "Via Carturan" , 
        "Corso della Repubblica" , "Via C. Battisti" , "C.so Matteotti" , "Piazza del Popolo" , 
        "Corso Della Repubblica" , "Via C. Battisti" , "Via E. Filiberto" , "Stazione Autolinee"]
diz = {"Line A":lineA, "Line B":lineB}

with open('output.txt', 'w', encoding='utf-8') as fout:
    for key in diz:
        for ele in diz[key]:
            fout.write('{} {}\n'.format(key, ele))

...并查看output.txt