在Python中用ASCII编码列表

时间:2016-03-22 12:58:20

标签: python

我想用ASCII编码列表。

我的清单:

countDuplicates :: (Eq a) => [a] -> [a] -> Int
countDuplicates [] b = 0
countDuplicates (x:rest) b =
    let myElem a [] = False
        myElem a (al:lst) = if a == al then True else myElem a lst
        index = if x `myElem` b then 1 else 0
    in index + countDuplicates rest b

我的目标:

data = {u'ismaster': True, u'maxWriteBatchSize': 1000, u'ok': 1.0, u'maxWireVersion': 3, u'minWireVersion': 0}

目前我这样做:

data = {'ismaster': True, 'maxWriteBatchSize': 1000, 'ok': 1.0, 'maxWireVersion': 3, 'minWireVersion': 0}

请参阅Website to convert a list of strings

我用这种方法丢失了一些值。

2 个答案:

答案 0 :(得分:4)

这是因为您要转换为实际列表,但您最初有一本字典。就这样做:

data = {key.encode("ascii"): value for key, value in data.items()}

您使用的是list comprehension,但您想要的是dict理解。

答案 1 :(得分:0)

' u'在字符串值前面表示该字符串已表示为unicode。这是一种表示比普通ASCII更多字符的方法。

如果您的词典包含特殊字符,您将遇到问题

strangeKey = u'Ознакомьтесь с документацией'

表示为u'\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439'

 asciirep = strangeKey.encode("ascii")

会引发此错误

SyntaxError: Non-ASCII character '\xd0' in ...

如果你仍然想要它,但有可能会引发一些例外,你可以使用以下

  • 从Python 2.7和3开始,您可以直接使用dict理解语法:

    d = {key.encode("ascii"): value for (key, value) in data.items()}

  • 在Python 2.6及更早版本中,您需要使用dict构造函数:

    d = dict((key.encode("ascii"), value) for (key, value) in data.items())