04.Python学习笔记之-字典

一、Python字典

字典时 Python中唯一内建的映射类型,字典指定值并没有特殊顺序,都存储在一个特殊的键(key)里,键可以是数字、字符或元组。

字典是可变类型,可存储任意类型对象。

1.创建和使用字典

d = {key1:value1,key2:value2}

字典由多个键及其对应的值构成的,字典里每个键/值(key/value)对用冒号(:)分割,每个项之间用逗号(,)分割,整个字典包括在花括号中({})。空字典不包含任何项,由两个大括号组成,{} 

字典示例:

>>> dict = {'zhangsan': 100 , 'lisi': 99 , 'wangwu': 88}
>>> dict
{'zhangsan': 100, 'lisi': 99, 'wangwu': 88}

二、字典的基本操作及特性

字典的基本操作在很多方面和序列类似,支持修改、删除等操作。

1.修改字典

>>> num = {'a':1,'b':2}
>>> num
{'a': 1, 'b': 2}
>>> num['a']=3
>>> num
{'a': 3, 'b': 2}

2.删除字典元素

>>> num = {'a':1,'b':2,'c':3}
>>> num
{'a': 1, 'b': 2, 'c': 3}
>>> del num['a']
>>> num
{'b': 2, 'c': 3}

3.删除整个字典

>>> num = {'a':1,'b':2,'c':3}
>>> num
{'a': 1, 'b': 2, 'c': 3}
>>> del num
>>> num
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    num
NameError: name 'num' is not defined

删除字典后就不能对字典进行访问了,因为执行del操作后字典就不存在了,所以执行会报变量没有定义的错误。

4.字典的特性

  1.  字典的值可以是任意类型,但是键不行,键必须为不可变类型(数字、字符串、元组)
  2.  同一键不要出现2次,如下例子: a的键出现2次,只有后面的值被记住
>>> num = {'a':1,'b':2,'c':3,'a':8}
>>> num
{'a': 8, 'b': 2, 'c': 3}

三、字典的函数

dict函数

可以使用dict函数,通过其他映射(如其他字典)或键/值序列对建立字典。

语法:

class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)

参数说明:

  • **kwargs -- 关键字
  • mapping -- 元素的容器。
  • iterable -- 可迭代对象。

例子:

>>> dict()            #创建空字典
{}
>>> dict(a=1,b=2,c=3) #传入关键字
{'a': 1, 'b': 2, 'c': 3}
>>> dict(zip(['a','b','c'],[1,2,3]))   #映射函数方式来构造字典
{'a': 1, 'b': 2, 'c': 3}
>>> dict([('a',1),('b',2),('c',3)])    #可迭代对象方式来构造字典
{'a': 1, 'b': 2, 'c': 3}

 2.len函数

len(dict)函数用于计算字典元素的个数,即键的总数:

例如:

>>> num = {'a':1,'b':2,'c':3}
>>> 
>>> len(num)
3

四、字典的格式化字符串

>>> num = {'张三':1,'李四':2,'王麻子':3}
>>> print('王麻子的学号是: %(王麻子)s' % num)
王麻子的学号是: 3
>>> 

字典的格式化方式是在每个转换说明符中的 %字符后加上用圆括号括起来的键,在跟上其字典名称

 字典和列表的几个特点:

字典的特点:

  • 查找和插入的速度极快,不会随着key的增加而变慢。
  • 需要占用大量的内存,内存浪费多。

列表的特点:

  • 查找和插入时间随着元素的增加而增加。
  • 占用空间小,浪费内存很少。

五、字典的方法

1.clear()

clear()方法用于删除字典内的所有项。

语法:

dict.clear()

>>> num = {'a':1,'b':2}
>>> num
{'a': 1, 'b': 2}
>>> num.clear()
>>> num
{}

2.copy()

copy()方法返回一个具有相同键/值对的新字典。这个方法是浅复制(shallow copy),因为值本身是相同的,而不是副本。

语法:

dict.copy()

>>> num = {'a':1,'b':2}
>>> num2 = num.copy()
>>> num2
{'a': 1, 'b': 2}
在业务中有时我们需要复制一个对象,但是又不想对原对象产生副作用,那就不能通过赋值给新变量来解决了(赋值不是拷贝一个对象)。Python专门提供了一种拷贝机制,基于原对象创建一个含有相同值的对象。拷贝有copy模块提供。

了解浅拷贝和深拷贝:

>>> x = [1,2]
>>> y = [3,4]
>>> z = [x,y]
>>> a = copy.copy(z)
>>> a
[[1, 2], [3, 4]]
>>> z
[[1, 2], [3, 4]]
>>> a[0] is z[0]
True
>>> b = copy.deepcopy(z)
>>> b[0] is z [0]
False

浅拷贝拷贝出来的a对象是引用x和y,当修改x或y的值时,a也会改变;
深拷贝会把里面的元素也重新拷贝一份,拷贝了一份x和y的值相等的两个元素,修改x和y的值,不会对b产生影响。

3.fromkeys()

fromkeys()方法用于创建一个新字典,以序列seq中的元素做字典的键,value为字典所有键对应的初始值。

语法:

dict.fromkeys(seq[, value])

  • seq -- 字典键值列表。
  • value -- 可选参数, 设置键序列(seq)对应的值,默认为 None。
>>> seq = ('name','age','sex')
>>> info = dict.fromkeys(seq)
>>> info
{'name': None, 'age': None, 'sex': None}
>>> info = dict.fromkeys(seq,10)
>>> info
{'name': 10, 'age': 10, 'sex': 10}

4.get()

get()方法返回指定键的值,如果值不在字典中,就返回默认值。

语法:

dict.get(key,default=None)

>>> student ={'zhangsan':'100','lisi':'50'}
>>> student.get('zhangsan')
'100'
>>> student.get('wangwu',1)
1
>>> print(student.get('wangwu'))
None

5.key in dict方法

Python字典in 操作符用于判断键是否存在于字典中,如果键在字典中就返回Ttue ,否则返回False。

>>> student ={'zhangsan':'100','lisi':'50'}
>>> 'zhangsan' in student
True
>>> 'zhangsan1' in student
False

6.items()

tiems()方法以列表返回可遍历的(键,值)元组数据。

语法:

dict.items()

>>> student ={'zhangsan':'100','lisi':'50'}
>>> student.items()
dict_items([('zhangsan', '100'), ('lisi', '50')])

7.keys()

keys()方法以列表返回一个字典所有键。

语法:

dict.keys()

>>> student ={'zhangsan':'100','lisi':'50'}
>>> student.keys()
dict_keys(['zhangsan', 'lisi'])

8.setdefault()

setdefault()方法和get()方法类似,用于获得与给定键相关联的值。如果键不存在与字典中,机会添加键并将值设为默认值。

语法:

dict.setdefault(key,default=None)

>>> student ={'zhangsan':'100','lisi':'50'}
>>> student.setdefault('zhangsan')
'100'
>>> student.setdefault('wangwu',200)
200
>>> student
{'zhangsan': '100', 'lisi': '50', 'wangwu': 200}
>>> student.setdefault('wangmazi')
>>> student
{'zhangsan': '100', 'lisi': '50', 'wangwu': 200, 'wangmazi': None}

当键不存在时,setdefalut()方法返回默认值并更新字典,默认值如果不设定就是 None,如果设定就是使用设定的值。

9.update()

update()方法用于把字典dict2的键/值对更新到dict里。

语法:

dict.update(dict2)

>>> student ={'zhangsan':'100','lisi':'50'}
>>> student2 = {'xiaoli':80}
>>> student.update(student2)
>>> student
{'zhangsan': '100', 'lisi': '50', 'xiaoli': 80}

10.values()

values()方法以列表形式返回字典中所有值,可以使用list()来转换为列表,与返回键的列表不同,返回的列表中可以包含重复的元素。

语法:

dict.values()

>>> student = {'zhangsan':100, 'lisi':60,'wangwu':100}
>>> print('student 字典所有值为:',list(student.values()))
student 字典所有值为: [100, 60, 100]
也许世上本没有幸运二字,只有那些给自己提出严格的要求,并且以高度自律逼自己完成的人,才能得到别人眼里的心想事成。
原文地址:https://www.cnblogs.com/shigozsr/p/12901874.html