本文目录一览:
- 1、紧急求助,python中的字典使用汉字作为key,访问出错
- 2、python 根据gb2312区位码查找汉字
- 3、如何查找Python中的关键字
- 4、python 字典的问题?
- 5、python 无法显示汉字
紧急求助,python中的字典使用汉字作为key,访问出错
这个是编码的问题,python中汉字是能作为key的,你使用同一种编码, 你看这不是好好的么!尽量不要用汉字作为key
python 根据gb2312区位码查找汉字
你给的问题不是很详细,所以我只能给你举个简单的例子,如下:
首先要使得脚本的汉字使用gb2312编码,然后在字符串中进行搜索,脚本如下:
# -*- coding: gb2312 -*-
findStr='哈哈我不在家'
print findStr.find('在')
如何查找Python中的关键字
1、用python这么久就没遇到过需要查找其关键字的时候,就那么点关键字看几遍后,基本都不会忘啦。而且写程序时,不管你用的是vim、gedit还是pycharm,遇到关键字都会变颜色提醒的呀。
2、交互模式下,试过可行的:
import __builtin__
dir(__builtin__)
help(__builtin__)
python 字典的问题?
题主你好,
写在前面: 我先给题主举个例子, 我先定义一个字典:
dict03 = {1:3, 5:7}
可以看出上面这个字典有两个元素, 此时我们使用dict03.values()得到的结果为:
dict_values([3,7])
从上面这个结果可以看出, 字典的values方法,会将字典中的所有键值对的值生成一个列表, 作为dict_values()参数,并返回.
-----
上面没有讲到重点,只是作了一个引, 下面看到底问题出在哪了.
题主定义的dict03={0:[1,3,5,7]}, 这个字典, 其实只有一个键值对, 键是整数0,值是列表[1,3,5,7], 所以此时dict03.value()返回的值为 dict_values([[1,3,5,7]]), 重点就在这里, 注意,返回的是:
dict_values( [[ 1,3,5,7 ]] )
而不是
dict_values( [ 1,3,5,7 ] )
抛开前面这个dict_values, 也就是返回的是:
[[1,3,5,7]] 而不是 [1,3,5,7]
前者是含有一个元素的列表, 只不过这个元素本身也是一个列表;
后者是含有4个元素的列表, 每个元素都是整型数字;
而 x in y 这种形式中, 是看x是否存在于y中,
拿题主的代码来说, 其实 i in dict03.values() 翻译过来是:
5 in [[1,3,5,7]], 因为[[1,3,5,7]]这个列表就一个元素,为[1,3,5,7],所以5并不在[[1,3,5,7]]中,
如果翻译过来是:
5 in [1,3,5,7],那么我们得到的结果肯定是True, 因为[1,3,5,7]中有4个元素,而5恰在其中.
所以解决方法也就有了, 想办法去掉[[1,3,5,7]]最外层的[].
代码及测试截图如下:
上图中, 第一个红框是将dict_values([[1,3,5,7]])转换成 [[1,3,5,7]];
第二个红框是将[[1,3,5,7]]转换成[1,3,5,7];
此时最后一句print(5 in [1,3,5,7]) 也就得到了我们想要的结果True了.
-----
希望可以帮到题主, 欢迎追问.
python 无法显示汉字
实际上,这段代码所出现的问题和cPickle模块没什么关系。而是Python 2显示中文“乱码”的问题。
Python 2中,str是8-bit string sequence(有点像Python 3中的bytes)。而Python 3中str就相当于Python 2中的unicode。
所以,
a = '上海'
repr(a)
"'\\xc9\\xcf\\xba\\xa3'"
a # a中存储的8字节转义字符序列
'\xc9\xcf\xba\xa3'
print a # 输出a,在此过程中,会对a进行解码操作,然后输出
上海
上例中,可以看到:
a = '上海'
a中实际存储的是:
'\xc9\xcf\xba\xa3'
这样一个字节序列。它实际上是对'上海'这个unicode字符串按gbk/cp936/gb18030编码得到的(和简体中文Windows操作系统的默认编码有关)。
给你推荐一篇博客:
下面是我写的示例:
# _*_ coding: gbk _*_
# Test with Python 2.7, Python 3.3 on Windows XP
try:
import cPickle as p
except:
import pickle as p
address_file = 'address.txt'
class Human(object):
def __init__(self, address):
self.address = address
def txl(self):
af = {'address': self.address}
print(af)
print(af['address'])
f = open(address_file, 'wb') # In python 3, use binary mode.
# In python 2.7, default protocol is 0.
# However, it is 3 in python 3.3.
p.dump(af, f, 0)
f.close()
address = '上海'
print(address)
dq = Human(address)
dq.txl()
af = open(address_file, 'rb') #
print(p.load(af))
af.close()
"""
Output
----------------------------------------
Python 2.7.6:
1. # -*- coding: utf-8 -*-
涓婃捣
{'address': '\xe4\xb8\x8a\xe6\xb5\xb7'}
涓婃捣
{'address': '\xe4\xb8\x8a\xe6\xb5\xb7'}
2. # -*- coding: gbk -*- or # _*_ coding: cp936 _*_
上海
{'address': '\xc9\xcf\xba\xa3'}
上海
{'address': '\xc9\xcf\xba\xa3'}
Python 3.3.3:
上海
{'address': '上海'}
上海
{'address': '上海'}
------------------------------------------
In Python 3.3.3:
'上海'.encode('utf-8')
b'\xe4\xb8\x8a\xe6\xb5\xb7'
_.decode('cp936')
'涓婃捣'
"""
从这个示例中可以看出,虽然把字典整个print出来不能正常解析address中的内容:
addr = {'addr': '上海'}
addr
{'addr': '\xc9\xcf\xba\xa3'}
print addr
{'addr': '\xc9\xcf\xba\xa3'}
但是单独打印:
addr['addr']
'\xc9\xcf\xba\xa3'
print addr['addr'] # print 输出之前隐含了编码解码操作,但为何打印整个字典时输出不正常尚待研究
上海
一切OK。
所以,如果真的用Python 2的话,对于该问题可以考虑手工负责编码、解码操作(如果使用print单独打印地址信息,就不用这么麻烦了,因为这些事它帮你做了)。用Python3,就没这么多问题了。
最后补充一点,pickle模块只是提供了一种序列化Python对象的方法。所以序列化生成的文件中和想象的不一样也不足为奇。正如自由de王国所说的,只要序列化后还能够反序列化成功就行了。实际上,当protocol不是0的情况下,序列化生成的文件是二进制格式的,根本没法用记事本直接看。