我在想如何在Python 2.7中對字典進行編碼。當我做到以下幾點:Python 2.7 Unicode字典
# coding=ISO-8859-1
Programmer = {'v': ["1","2x","3","4","5"]}
Programmer.update({'x': ["1","2x","3","4","5"]})
Programmer.update({'y': ["1","2x","3","4","5"]})
Programmer.update({'z': ["1","2x","3","4","5"]})
Programmer.update({'æ': ["1","2x","3","4","5"]})
Programmer.update({'ø': ["1","2x","3","4","5"]})
Programmer.update({'å': ["1","2x","3","4","5"]})
print Programmer
我得到:
{'v': ['1', '2x', '3', '4', '5'], '\xe5': ['1', '2x', '3', '4', '5'], '\xf8': ['1', '2x', '3', '4', '5'], '\xe6': ['1', '2x', '3', '4', '5'], 'y': ['1', '2x', '3', '4', '5'], 'x': ['1', '2x', '3', '4', '5'], 'z': ['1', '2x', '3', '4', '5']}
而我想要的是:
{'v': ['1', '2x', '3', '4', '5'], 'å': ['1', '2x', '3', '4', '5'], 'ø': ['1', '2x', '3', '4', '5'], 'æ': ['1', '2x', '3', '4', '5'], 'y': ['1', '2x', '3', '4', '5'], 'x': ['1', '2x', '3', '4', '5'], 'z': ['1', '2x', '3', '4', '5']}
編輯:
這是我工作的代碼:
# -*- coding: cp1252 -*-
from PyQt4 import QtCore, QtGui
import locale
global Programmer
Programmer = {u'v': ["1","2x","3","4","5"]}
Programmer.update({u'x': ["1","2x","3","4","5"]})
Programmer.update({u'y': ["1","2x","3","4","5"]})
Programmer.update({u'z': ["1","2x","3","4","5"]})
Programmer.update({u'æ': ["1","2x","3","4","5"]})
Programmer.update({u'ø': ["1","2x","3","4","5"]})
Programmer.update({u'å': ["1","2x","3","4","5"]})
class Dialog(QtGui.QDialog):
NumGridRows = 3
NumButtons = 3
def __init__(self):
super(Dialog, self).__init__()
styleComboBox = QtGui.QComboBox()
styleComboBox.addItem("UI Item01")
styleLabel = QtGui.QLabel("&UI Text:")
styleLabel.setBuddy(styleComboBox)
opgaveComboBox = QtGui.QComboBox()
opgaveComboBox.addItem(u"v")
opgaveComboBox.addItem(u"x")
opgaveComboBox.addItem(u"å")
opgaveLabel = QtGui.QLabel("&Opgave:")
opgaveLabel.setBuddy(opgaveComboBox)
self.programComboBox = QtGui.QComboBox()
self.programComboBox.addItem("UI item02")
programLabel = QtGui.QLabel("&Program:")
programLabel.setBuddy(self.programComboBox)
opgaveComboBox.activated[str].connect(self.changeOpgave)
topLayout = QtGui.QHBoxLayout()
topLayout.addWidget(styleLabel)
topLayout.addWidget(styleComboBox)
#topLayout.addStretch(1)
topLayoutB = QtGui.QHBoxLayout()
topLayoutB.addWidget(opgaveLabel)
topLayoutB.addWidget(opgaveComboBox)
#topLayoutB.addStretch(1)
topLayoutC = QtGui.QHBoxLayout()
topLayoutC.addWidget(programLabel)
topLayoutC.addWidget(self.programComboBox)
mainLayout = QtGui.QGridLayout()
mainLayout.addLayout(topLayout, 0, 0, 1, 2)
mainLayout.addLayout(topLayoutB, 1, 0, 1, 2)
mainLayout.addLayout(topLayoutC, 2, 0, 1, 2)
mainLayout.setRowStretch(1, 1)
mainLayout.setRowStretch(2, 1)
mainLayout.setColumnStretch(0, 1)
mainLayout.setColumnStretch(1, 1)
self.setLayout(mainLayout)
self.changeStyle('Cleanlooks')
self.setWindowTitle("temp test")
def changeOpgave(self, opgaveName):
self.programComboBox.clear()
print "begin 01"
print Programmer[opgaveName]
if not opgaveName in Programmer:
print "begin 02"
self.programComboBox.addItem("Andet")
else:
print "go"
for item in Programmer[opgaveName]:
self.programComboBox.addItem(item)
def changeStyle(self, styleName):
QtGui.QApplication.setStyle(QtGui.QStyleFactory.create(styleName))
self.changePalette()
def changePalette(self):
QtGui.QApplication.setPalette(QtGui.QApplication.style().standardPalette())
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
dialog = Dialog()
dialog.show()
sys.exit(dialog.exec_())
我得到
KeyError: PyQt4.QtCore.QString(u'v')
KeyError: PyQt4.QtCore.QString(u'x')
KeyError: "PyQt4.QtCore.QString(u'\xe5')
當試圖從 「opgave」 列表
你需要閱讀[Python Unicode HOWTO](http://docs.python.org/2/howto/unicode.html),我會說。另外,Python打印字符串作爲表示,其中非ASCII和不可打印字符由轉義序列表示。 *值*沒有改變。 – 2013-05-08 09:46:29
是的,沒有讀過那個,但我想我完全不理解它。問題是當我後來在我的代碼開始比較它與「if」語句我得到的關鍵錯誤「KeyError:u'\ xc5'」 – user2339945 2013-05-08 10:36:31
然後,某些* else *在這一點上是錯誤的。你的例子中的字典不包含字符''\ xc5',所以這並不奇怪。 – 2013-05-08 10:41:11