Python数据结构之字典类型(dict)

字典类型(dict)

  • 字典数据类型介绍

  • 字典键值对的增加

  • 字典键值对的删除

  • 字典键值对的修改

  • 字典键值对的查看

  • 字典键的特性

  • 字典的嵌套

  • 字典的内置方法

  • 解构(解包)和封装

一、字典数据类型介绍

  字典是Python中唯一的一个映射类型,它是以 { } 扩起来的键值对组成的{key:value};在字典中key是唯一的,在保存的时候,根据key来计算出一个内存地址,然后将key-value保存在这个地址中,这种算法被称为hash算法,所以,切记,在dict中存储的key-value中的key必须是可hash的;

  字典是一个可变的无序的可以存储任何类型的类型;

  字典中的key都必须是可哈希的,不可变的数据类型;

  字典中的值没有限制,可以是任何数据类型;

  一个简单的字典实例:

>>> dic = {"name":"zjk","age":18}

二、字典键值对的增加

  字典中的键值对增加有两个基本方式:dict[key] = value       dict.setdefault(key,value)

  1.dict[key] = value

  实例:

>>> dic = {"name":"zjk","age":18}
>>> dic["like"] = [1,2,3]
>>> print(dic)
{'name': 'zjk', 'age': 18, 'like': [1, 2, 3]}

  2.dict.setfefault(key,value)

  说明:如果键在字典中存在不进行任何操作,否则就添加;

  实例:

>>> dic = {"name":"zjk","age":18}
>>> dic.setdefault("home","wuan")
'wuan'
>>> print(dic)
{'name': 'zjk', 'age': 18, 'home': 'wuan'}

三、字典键值对的删除

  删除键值对的四种方法:pop(key),del dic[key]、popitem()、clear()

  1.dict.pop(key)

  说明:删除键值对,有返回值,返回的是被删除的key的value;

>>> dic = {"name":"zjk","age":18}
>>> a = dic.pop("age")
>>> print(a,dic)
18 {'name': 'zjk'}

  2.del dict[key]

  说明:通过key删除

  实例:

>>> dic = {"name":"zjk","age":18}
>>> del dic["name"]
>>> print(dic)
{'age': 18}

  3.dict.popitem()

  说明:随机删除,默认删除最后一个,(还在测试中)

  实例:

>>> dic = {"name":"zjk","age":18}
>>> dic.popitem()
('age', 18)
>>> print(dic)
{'name': 'zjk'}

 >>> dic = {"name":"zjk","age":18}
 >>> a = dic.popitem()
 >>> print(dic,a)
 {'name': 'zjk'} ('age', 18)

  4.dic.clear()

  说明:清空字典;

  实例:

>>> dic = {"name":"zjk","age":18}
>>> dic.clear()
>>> print(dic)
{}

四、字典键值对的修改

  修改字典两种方法:dic[key] = value     dic.update(字典)

  1.dic[key] = value

  实例:

>>> dic = {"name":"zjk","age":18}
>>> dic["name"] = "lalala"
>>> print(dic)
{'name': 'lalala', 'age': 18}

  2.dic.update(字典)

  说明:将一个字典导入到另一个字典中,新的数据会覆盖旧的数据;

  实例:

>>> dic = {"name":"zjk","age":18}
>>> dic1 = {"home":"wuan","age":23,"high":"66666"}
>>> dic.update(dic1)
>>> print(dic)
{'name': 'zjk', 'age': 23, 'home': 'wuan', 'high': '66666'}

五、字典键值对的查看

  查看字典的几种方法:for循环、dic[key]、get(key)、setfault(key)

  1.for循环

  实例:

>>> dic = {"a":1,"b":2,"c":3,"d":4,"e":5}
>>> for n in dic:
...     print(n)
... 
a
b
c
d
e
>>> for n in dic.values():
...     print(n)
... 
1
2
3
4
5
>>> for n in dic.items():
...     print(n)
... 
('a', 1)
('b', 2)
('c', 3)
('d', 4)
('e', 5)

  2.dict[key]

  说明:如果key在字典中存在,则返回对应key的value值,如果key不存在,则报错;

  实例:

>>> dic = {"a":1,"b":2,"c":3,"d":4,"e":5}
>>> print(dic["a"])
1
>>> print(dic["b"])
2
>>> print(dic["aaa"])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'aaa'

  3.dict.get(key,default=None)

  说明:返回指定键的值,如果值不在字典中则返回default值;

  实例:

>>> dic = {"a":1,"b":2,"c":3,"d":4,"e":5}
>>> print(dic.get("a"))
1
>>> print(dic.get("aaa"))
None
>>> print(dic.get("aaa","66666"))
66666

  4.dict.setfault(key,dafault)

  说明:和get类似,如果键存在的话返回键对应的值,但如果键不存在的话,将会在字典中添加键并将值设为default;

  实例:

>>> dic = {"a":1,"b":2,"c":3,"d":4,"e":5}
>>> print(dic.setdefault("a","888"))
1
>>> print(dic.setdefault("aaaa","888"))
888
>>> print(dic)
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'aaaa': '888'}

六、字典键的特性

  字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行;

  不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:

>>> dic = {"a":1,"b":2,"c":3,"a":4}
>>> print(dic["a"])
4

七、字典键的嵌套

  字典里可以无限嵌套,字典也可以嵌套字典:

dic = {
    'name':'汪峰',
    'age':43,
    'wife':{
        'name':'国际章',
        'age':39,
        'salary':100000
    },
    'baby':[
        {'name':'熊大','age':18},
        {'name':'熊二','age':15},
    ]

}

八、字典键的内置方法

  1.clear(self)

  说明:用于删除字典内所有元素,清空字典;

  语法:dict.clear()

  实例:

>>> dic = {"a":1,"b":2,"c":3}
>>> dic.clear()
>>> print(dic)
{}

  2.copy(self)

  说明:返回一个字典的浅复制,将字典进行复制;

  语法:dcit.copy()

  返回值:返回一个字典的浅复制;

  实例:

>>> dic = {"name":"zjk","age":23}
>>> dic1 = dic.copy()
>>> print(dic1)
{'name': 'zjk', 'age': 23}

 

  3.fromkeys(*args, **kwargs)

  说明:用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值;

  语法:dict.fromkeys(*args, **kwargs)

  返回值:该方法返回字典;

  实例:

>>> li = ["name","age","like"]
>>> a = dict.fromkeys(li,"666")
>>> print(a)
{'name': '666', 'age': '666', 'like': '666'}
>>> print(type(a))
<class 'dict'>

  4.get(self, k, d=None)

  说明:返回指定键的值,如果值不在字典中返回默认值。默认值为None;

  语法:dict.get(key,default=None)

  参数:key ------> 字典中要查找的键;

     default ------> 如果指定的值不存在,返回该默认值;

  返回值:返回指定键的值,如果值不在字典中返回默认值 None;

  实例:

>>> dic = {"name":"zjk","age":23}
>>> print(dic.get("name"))
zjk
>>> print(dic.get("name11"))
None
>>> print(dic.get("name11","888"))
888

  5.items(self)

  说明:以列表形式返回可遍历的(键, 值) 元组数组;

  语法:dict.items()

  返回值:返回可遍历的(键, 值) 元组数组;

  实例:

>>> dic = {"name":"zjk","age":23}
>>> print(dic.items())
dict_items([('name', 'zjk'), ('age', 23)])

  6.in操作符

  说明: in 操作符用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false。

  语法:key in dict

  参数:key -------> 要在字典中查找的键;

  返回值:如果键在字典里返回true,否则返回false;

  实例:

>>> dic = {"name":"zjk","age":23}
>>> if "name" in dic:
...     print(666)
... else :
...     print(111)
... 
666
>>> if "hahaha" in dic:
...     print(666)
... else :
...     print(111)
... 
111

  7.keys(self)

  说明:以列表返回一个字典所有的键;

  语法:dict.keys()

  返回值:返回一个字典所有的键。

  实例:

>>> dic = {"name":"zjk","age":23}
>>> print(dic.keys())
dict_keys(['name', 'age'])

  8.pop(self, k, d=None)

  说明:删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。

  语法:dict.pop(k, d=None)

  参数:key ----------> 要删除的键值;

     default -------> 如果没有key,返回default值

  返回值:返回被删除的value值

  实例:

>>> dic = {"name":"zjk","age":23}
>>> a = dic.pop("age")
>>> print(dic,a)
{'name': 'zjk'} 23
>>> 
>>> dic = {"name":"zjk","age":23}
>>> print(dic.pop("aaaaa","666"))
666

  9.popitem(self)

  说明:随机返回并删除字典中的一对键和值(一般删除末尾对);如果字典已经为空,却调用了此方法,就报出KeyError异常;

  语法:dcit.popitem()

  返回值:返回一个键值对(key,value)形式。是一个元组类型;

  实例:

>>> dic = {"name":"zjk","age":23}
>>> b = dic.popitem()
>>> print(dic,b)
{'name': 'zjk'} ('age', 23)
>>> dic = {}
>>> b = dic.popitem()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'popitem(): dictionary is empty'

  10.setdefault(self, k, d=None)

  说明:setdefault() 方法和get()方法类似, 如果键不已经存在于字典中,将会在字典中添加键并将值设为默认值。

  语法:dict.setdefault(key, default=None)

  参数:key -----------> 查找的键值;

     default -------> 键不存在时,设置的默认键值;

  返回值:如果 key 在 字典中,返回对应的值。如果不在字典中,则插入 key 及设置的默认值 default,并返回 default ,default 默认值为 None。

  实例:

>>> dic = {"name":"zjk","age":23}
>>> print(dic.setdefault("name"))
zjk
>>> print(dic.setdefault("aaaaa"))
None
>>> print(dic.setdefault("bbbbb","6666"))
6666
>>> print(dic)
{'name': 'zjk', 'age': 23, 'aaaaa': None, 'bbbbb': '6666'}

  11.update(self, E=None, **F)

  说明:把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里,如果有相同的键值进行替换;

  语法:dict.update(dict2)

  参数:dict2 -----> 添加到指定字典dict里的字典。

  实例:

>>> dic = {"name":"zjk","age":23}
>>> dic1 = {"a":1,"b":2,"age":18}
>>> dic.update(dic1)
>>> print(dic)
{'name': 'zjk', 'age': 18, 'a': 1, 'b': 2}

  12.values(self)

  说明:以列表返回字典中的所有值;

  语法:dict.values()

  返回值:返回字典中的所有值;

  实例:

>>> print(dic)
{'name': 'zjk', 'age': 18, 'a': 1, 'b': 2}
>>> print(dic.values())
dict_values(['zjk', 18, 1, 2])

九、解构(解包)和封装

  元素在左边是解构,元素在右边是封装;

  封装的定义:将多个值使用逗号分隔,组合在一起;本质上返回一个元组,只是省略了小括号;Python特有语法,被很多语言学习和借鉴;

  解构的定义:按照元素顺序,把线性解构的元素,赋值给变量;

  Python3中的解构变化:

    通过使用星号 * 加上变量,可以接受所有元素;

    不能单一的使用星号作为变量接收,如果可以,相当于lst[0:0]

    同一个解构中,只能使用一个星号;

    当左边变量超过右边元素个数的时候,是不允许的;

  两大用法:

  对称性赋值:

    对称性赋值在很多情况下被称为解构,其实只是解构的一小部分;

    把线性结果(包括字典和list等)的元素解开,并按顺序赋值给其他变量;

    左边接收的变量数要和右边解开的元素个数一致;

    通常用在x,y = y,x 相当于将y,x先封装为一个元组(y,x),等价于x,y = (y,x),然后依据位置参数进行依次赋值。

  简化添加类型:

    极大的简化了“添加”的类型,比如结合字典,并且以明确的方式进行:

    例如:

    

  实例:

>>> a,b = 1,2
>>> print(a,b)
1 2
>>> a,b = (1,2)
>>> print(a,b)
1 2
>>> a,b = [1,2]
>>> print(a,b)
1 2
>>> a,b = {1,2}
>>> print(a,b)
1 2
>>> a,b = {"a":1,"b":2}
>>> print(a,b)
a b
>>> 
>>> 
>>> 
>>> a,*b = {1,2,3}
>>> print(a,b)
1 [2, 3]
>>> a,*b,c = {1,2,3,4,5,6,7,8}
>>> print(a,b,c)
1 [2, 3, 4, 5, 6, 7] 8

    

  

猜你喜欢

转载自www.cnblogs.com/zhangjunkang/p/9399462.html