我刚开始学习python,我正在为字典做练习,但由于我必须使用的示例代码是西里尔语,我有一些编码问题。我有以下代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
temperatures = {
'София': -14,
'Новосибирск': -31
}
print("-" * 20)
print(temperatures)
print("-" * 20)
key = 'Бургас'
if key in temperatures:
print(temperatures[key])
else:
print("No data for {}".format(key))
在添加# -*- coding: utf-8 -*-
行之前,我收到了SyntaxError:非ASCII字符' \ xd0'。然而现在,错误消失了,但西里尔字的输出不正确。这是输出:
--------------------
{'\xd0\x9d\xd0\xbe\xd0\xb2\xd0\xbe\xd1\x81\xd0\xb8\xd0\xb1\xd0\xb8\xd1\x80\xd1\x81\xd0\xba': -31, '\xd0\xa1\xd0\xbe\xd1\x84\xd0\xb8\xd1\x8f': -14}
--------------------
No data for Бургас
因此,从python dict中打印出来的Cyrillic中的单词混乱,但行Бургас
出现正确。我尝试使用print(format(temperatures))
,但输出是相同的。如果它打印出一个西里尔字,那不应该打印所有这些字吗?
答案 0 :(得分:0)
很抱歉,暂且无法发表评论:您的代码适用于我(在arch linux上使用emacs)。
编辑:我的默认python解释器是Python3.6,它与Python2.7的输出相同。 Python 2.7是否需要?
答案 1 :(得分:0)
假设您使用的是Python 2,此处的输出符合预期:
repr
而不是str
打印的键(和值)。这就解释了为什么代码点数大于255的所有字符都使用其转义形式。如果你想在Python 2中显示一个词典,你必须手动 :
h = temperatures
print('{' + ', '.join((str(k)+ ': ' + str(h[k]) for k in h.keys())) + '}')