繁体   English   中英

Python 2.7 Unicode字典

[英]Python 2.7 Unicode Dict

我想知道如何在Python 2.7中编码Dicts。 当我执行以下操作时:

# 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”列表中选择时(在第79行抛出错误)

组合框回调传递给PyQt4.QtCore.QString()对象,而不是unicode字符串。 另一方面,您的字典应使用unicode()键(这是正确的做法)。

首先将QString()对象转换为unicode值:

def changeOpgave(self, opgaveName):
    opgaveName = unicode(opgaveName)

之所以QString()是因为QString()对象已经保存了unicode数据,并为Python提供了正确的钩子以进行此转换,而无需使用显式编解码器对数据进行重新编码。

一旦opgaveName值是unicode键,您就可以使用它将其与字典进行比较。

请注意,您可以只定义字典而无需.update()调用:

Programmer = {
    u'v': ["1","2x","3","4","5"],
    u'x': ["1","2x","3","4","5"],
    u'y': ["1","2x","3","4","5"],
    u'z': ["1","2x","3","4","5"],
    u'æ': ["1","2x","3","4","5"],
    u'ø': ["1","2x","3","4","5"],
    u'å': ["1","2x","3","4","5"],
}

global关键字在何处使用都没有意义; 该关键字仅在函数内部有意义,在这里是多余的。

可能是这样的:

print "{",
for key, value in Programmer.items():
    print "'%s'" % key, ':', value, ',',
print "}"

当您进行打印时,这将打印str(Programmers)但在dict内部使用repr(key)repr(value) 内容不会改变,只会以不同的方式打印。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM