pythonsetdefault(python中.setdefault是什么)

1.python中.setdefault()是什么

>> trainSet={}

>>> trainSet.setdefault(1,2) # 给字典trainSet 设置键为1 值为2的键值对 相当于trainSet[1]=2

2

>>> print trainSet.setdefault(1,3)#如果已经存在1的键 那么setdefault的时候就不会改变他原有的值

2

>>> trainSet[1]=3 #可以这样子改变它的1键值

2.python 关于dict中的 setdefault的问题

查看help(dict.setdefault)可知:

setdefault(key[, default])

If key is in the dictionary, return its value. If not, insert key with a value of default and return default. default defaults to None.

lettergirls.setdefault(girl[0],[]) 字典里没有girl[0]就添加了这个key,并将value设置为[]空列表,return的也是[]这个空列表。

3.python 用setdefault()或者get()中往字典内插入list类型的值,为什

从这个错误信息我们能看出的是

rule_class.setdefault(classify,[]) 这个值是None,而不是list

而None是没有append这个属性或方法的,所以报错

那么你要调试,就看看rule_class.setdefault(classify,[])获得这个值的步骤中哪里出错了,

建议,像这种有错误风险的地方

最好加判断

if isinstance(rule_class.setdefault(classify,[]), list):#判断其是否为一个list

rule_class[classify]=rule_class.setdefault(classify,[]).append(exp)

4.python中的sys.setdefaultencoding('utf8')是什么呢

设置默认编码方式。中文编码方式一般有utf8和gbk两种,如果不读取编码方式不同的字符是不用设置的,Python3中更是默认为utf8的编码方式。

以下引用鲜果网:

UTF-8编码是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。

GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。

GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不是国家标准)

UTF-8编码的文字可以在各国各种支持UTF8字符集的浏览器上显示。

比如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,而无需他们下载IE的中文语言支持包。 所以,对于英文比较多的论坛 ,使用GBK则每个字符占用2个字节,而使用UTF-8英文却只占一个字节。

UTF8是国际编码,它的通用性比较好,外国人也可以浏览论坛,GBK是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBK大

5.python 字典 setdefault 求助

dict.setdefault(x,y)返回字典中与键X对应的值,若不存在则返回y,并将X:Y键值对添加到字典中d.setdefault(x,[])返回的空list与d['a']中的列表是同一个地址(list是可变对象),对这个空列表进行append()操作就相当于对d['a']所指的列表进行操作,一旦字典中存在了键'a',则返回的是d['a']所对应的列表而不是空列表了,后面的操作就相当于:d['a'].append(word)结果:将以同一个字母开头word的放在同一个列表中。

6.立即停止使用 setdefaultencoding,以及为什么

最坏实践 Python code?123 import sys reload(sys) sys.setdefaultencoding('utf-8') 上面这种代码曾经(现在依然)是解决中文编码的万能钥匙。

解决编码错误问题一劳永逸,从此和 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128) 说 byebye 。那么现在,对于那些想解决 UnicodeEncodeError 问题而搜索到这篇文章的读者,我要说的是,不要用以上的代码片段。

下面我来说说为什么,以及我们应该怎么做。sys.setdefaultencoding('utf-8') 会导致的两个大问题 简单来说这么做将会使得一些代码行为变得怪异,而这怪异还不好修复,以一个不可见的 bug 存在着。

下面我们举两个例子。1. 编码错误 Python code?1234567891011121314 import chardet def print_string(string): try: print(u"%s" % string) except UnicodeError: print u"%s" % unicode(byte_string, encoding=chardet.detect(string)['encoding']) print_string(u"Æ".encode("latin-1")) import sys reload(sys) sys.setdefaultencoding('utf-8') print(key_in_dict('Æ')) 输出:Python code?12$~ Æ$~ Æ 在上面的代码中,默认的 ascii 编码无法解码,Æ latin-1 编码 hex 表示是 c5 ae ,显然是超出了只有128个字符的 ascii 码集的,引发 UnicodeError 异常,进入异常处理。

异常处理则会根据编码探测,用最可能的编码来解码,会比较靠谱地输出 Æ 。而一旦我们将 defaultencoding 设置为 utf-8,因为 utf-8 的字符范围是完全覆盖 latin-1,因此,会直接使用 utf-8 进行解码。

c5 ae 在 utf-8 中,是 Æ。于是我们打印出了完全不同的字符。

可能你们会说我们不会写这样的代码。如果我们写了也会做修正。

但如果是第三方库这么写了呢?项目依赖的第三方库就这么 bug 了。如果你不依赖第三方库,那么下面这个 bug,还是逃不过。

2. dictionray 行为异常 假设我们要从一个 dictionary 里查找一个 key 是否存在,通常来说,有两种可行方法。Python code?12345678910111213#-*- coding: utf-8 -*- d = {1:2, '1':'2', '你好': 'hello'} def key_in_dict(key) if key in d: return True return False def key_found_in_dict(key): for _key in d: if _key == key: return True return False 我们对比下改变系统默认编码前后这俩函数的输出有什么不同。

Python code?#-*- coding: utf-8 -*- print(key_in_dict('你好')) print(key_found_dict('你好')) print(key_in_dict(u'你好')) print(key_found_in_dict(u'你好')) print('------utf-8------') import sys reload(sys) sys.setdefaultencoding('utf-8') print(key_in_dict('你好')) print(key_found_dict('你好')) print(key_in_dict(u'你好')) print(key_found_in_dict(u'你好')) 输出:Python code?123456789$~ True$~ True$~ False$~ False$~ ------utf-8------$~ True$~ True$~ False$~ True 可以看到,当默认编码改了之后,两个函数的输出不再一致。dict 的 in 操作符将键做哈希,并比较哈希值判断是否相等。

对于 ascii 集合内的字符来说,不管是字节字符类型还是还是 unicode 类型,其哈希值是一样的,如 u'1' in {'1':1} 会返回 True,而超出 ascii 码集的字符,如上例中的 '你好',它的字节字符类型的哈希与 unicode 类型的哈希是不一样的。而 == 操作符则是做了一次转换,将字节字符(byte string,上面的 '你好')转换成 unicode(u'你好') 类型,然后对转换后的结果做比较。

在 ascii 系统默认编码中,'你好'转换成 Unicode 会产生 Warning: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal,因为超出码集无法转换,系统会默认其不相等。当系统编码被我们手动改为 utf-8 后,这个禁忌则被解除,'你好' 能够顺利被转换成 unicode,最后的结果就是,in 和 == 行为不再一致。

问题的根源:Python2 中的 string Python 为了让其语法看上去简洁好用,做了很多 tricky 的事情,混淆 byte string 和 text string 就是其中一例。在 Python 里,有三大类 string 类型,unicode(text string),str(byte string,二进制数据),basestring,是前两者的父类。

其实,在语言设计领域,一串字节(sequences of bytes)是否应该当做字符串(string)一直是存在争议的。我们熟知的 Java 和 C# 投了反对票,而 Python 则站在了支持者的阵营里。

其实我们在很多情况下,给文本做的操作,比如正则匹配、字符替换等,对于字节来说是用不着的。而 Python 认为字节就是字符,所以他们俩的操作集合是一致的。

然后进一步的,Python 会在必要的情况下,尝试对字节做自动类型转换,例如,在上文中的 ==,或者字节和文本拼接时。如果没有一个编码(encoding),两个不同类型之间的转换是无法进行的,于是,Python 需要一个默认编码。

在 Python2 诞生的年代,ASCII 是最流行的(可以这么说吧),于是 Python2 选择了 ASCII。然而,众所周知,在需要需要转换的场景,ASCII 都是没用的(128个字符,够什么吃)。

在历经这么多年吐槽后,Python 3 终于学乖了。默认编码是 Unicode,这也就意味着,做所有需要转换的场合,都能正确并成功的转换。

最佳实践 说了这么。

7.如何把spyder的python设置成跟系统默认

查询系统默认编码可以在解释器中输入以下命令:

Python代码

>>>sys.getdefaultencoding()

设置默认编码时使用:

Python代码

>>>sys.setdefaultencoding('utf8')

可能会报AttributeError: 'module' object has no attribute 'setdefaultencoding'的错误,执行reload(sys),在执行以上命令就可以顺利通过。

此时在执行sys.getdefaultencoding()就会发现编码已经被设置为utf8的了,但是在解释器里修改的编码只能保证当次有效,在重启解释器后,会发现,编码又被重置为默认的ascii了,那么有没有办法一次性修改程序或系统的默认编码呢。

pythonsetdefault

转载请注明出处代码入门网 » pythonsetdefault(python中.setdefault是什么)

资讯

python3索引(如何用Python建立索引)

阅读(43)

本文主要为您介绍python3索引,内容包括如何用Python建立索引,如何用Python建立索引建立索引:首先输入100行字符串,用于构建,python如何将列表作为列表的索引。import repatt = re.compile("\w+")def makeIndex(filename):index = {}w

资讯

python找最大(python如何将一串数字找出里面最大和最小)

阅读(51)

本文主要为您介绍python找最大,内容包括python如何将一串数字找出里面最大和最小,python找最大值,Python用while循环在一组数中找出最大值,力求简单。目标:我们的目标是把一串数字拆开,查找最大值和最小值做法:1. 将数值转化为字符串2. 将字符

资讯

pythonvimwindows(python在linux和windows的区别)

阅读(38)

本文主要为您介绍pythonvimwindows,内容包括在windows下怎么用vim运行python,如何在windows下实现vim与python的交互,非常新的手请教vim编写python的问题。python是一种对缩进有严格要求的语言, Python脚本可以使用非常多的工具进行编写,笔者

资讯

python文件版本(Python的这几个版本区别)

阅读(30)

本文主要为您介绍python文件版本,内容包括Python的这几个版本区别,Python的这几个版本区别,python文件和解释器版本不同如何解决。系统区别:Download Windows X86 可供电脑系统32位使用。2、Download Windows X86-64 可供电脑

资讯

python获取文件修改时间(python中如何获得文件的修改时间)

阅读(25)

本文主要为您介绍python获取文件修改时间,内容包括python中如何获得文件的修改时间,如何在Python中获取文件创建和修改日期/时间,python中怎样获取文件的修改时间及其他系统信息状态。我们通过文件属性的获取,os.stat() 方法:>>>import os>>>s

资讯

pythonrw(python中wr表示什么意思)

阅读(27)

本文主要为您介绍pythonrw,内容包括python中w、r表示什么意思,python中w、r表示什么意思,python读写文件中w与wt;r与rt有何区别。文件读写就是一种常见的IO操作。文件读写操作步骤不同的编程语言读写文件的操作步骤大体都是一样的,都分为以

资讯

python行分割(Python中split和split的区别)

阅读(37)

本文主要为您介绍python行分割,内容包括使用python如何按行数拆分文件,python中怎么拆分一行内多列数据成多行,如何用python对一行字符串进行不规则分割。str.split( ) 切割符默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。str.split("

资讯

pythoninnutshell(PythonString和PyQtQString的区别)

阅读(26)

本文主要为您介绍pythoninnutshell,内容包括#!/usr/bin/python这是个什么意思,PythonString和PyQtQString的区别,python中的foriinrange怎么用。以下在python2.5和PyQt4.4.6 for python2.5环境下讨论。在python中有两种与字符有关的类型:str

资讯

python字典key排序(Python中如何以dict的key排序输出)

阅读(28)

本文主要为您介绍python字典key排序,内容包括Python中如何以dict的key排序输出,求助:python元组作为字典的key的排序问题,python怎么对字典进行排序。123456789101112131415#输出的2113顺序却不是我们预想5261的那样初始4102化的顺序,查询相1

资讯

pythondll指针(怎样用python调用dll)

阅读(1)

本文主要为您介绍pythondll指针,内容包括python中如何查看dll文件中的函数,如何用python调用应用程序的.dll文件,回调函数指针在python中怎么用。可以的,python中一般有两种方法调用DLL中的函数。1.直接使用函数名,函数名可以用dependencywal

资讯

python日志统计(python有没有通用的日志统计系统)

阅读(1)

本文主要为您介绍python日志统计,内容包括python有没有通用的日志统计系统,如何用python,每隔5分钟对实时日志做统计处理,如何用python分析网站日志。logging模块import logging# 配置日志,输出到控制台logging.basicConfig(level=loggin

资讯

pythonmultiply(Python实现输出1*2*3*4*5)

阅读(1)

本文主要为您介绍pythonmultiply,内容包括python中的multiply函数怎么用,numpy中multiply函数怎么用,Python实现输出1*2*3*4*5100的和。究竟是和还是积呢?如果是积的话,我们设计的代码如下,有注释multi_num = 1 # 乘法结果初始化for i in rang

资讯

pythongui界面(python图形化界面设计tkinter)

阅读(1)

本文主要为您介绍pythongui界面,内容包括python图形化界面设计tkinter,python编写gui界面,pythongui图形界面。python提供了多个图形开发界面的库,几个常用Python GUI库如下:Tkinter: Tkinter模块("Tk 接口")是Py

资讯

pythonintellij(intellijidea怎么编写python程序打包发送到spark)

阅读(1)

本文主要为您介绍pythonintellij,内容包括如何使用intellijidea编写python,intellij可以跑python吗,如何使用idea开发python。,客户端和虚拟集群中hadoop、spark、scala的安装目录是一致的,这样开发的spark应用程序的时候不需要打包spark开发

资讯

aucpython(auc论文里的怎么计算pythonsvm)

阅读(1)

本文主要为您介绍aucpython,内容包括auc论文里的怎么计算pythonsvm,pythontensorflow怎么添加auc,怎么用Python软件算模型的AUC和ROC曲线啊。利用Python画ROC曲线,以及值的计算\ 前言 R

资讯

python三元运算符if(python没有三元运算符吗)

阅读(1)

本文主要为您介绍python三元运算符if,内容包括python没有三元运算符吗,什么时候三元运算符python,如何用Python的if条件运算符去求三个值中最大的值,并返回最大值的。Python没有三目运算符(?:),但也有类似的替代方案,那就是true_part if conditio