Python基础08 字典

字典是Python中唯一的内置映射类型。

 

Python3.6(包含)之后,所有的普通dict()字典都变为有序的了。

参考文章:https://www.kingname.info/2019/07/13/python-dict/

 

一、创建字典

1、字典由键及其对应的值组成

>>> dict = {'Mike': 40, 'John': 30}

在字典中,键必须是独一无二的。

字典中的键可以是任何不可变的类型,如整数、浮点数、字符串和元组。

2、函数dict

可使用函数dict(实际是一个类)从其他键-值对序列或者其他字典创建字典。

>>> lst = [('Mike', 40), ('John', 30)]
>>> d = dict(lst)
>>> d
{'Mike': 40, 'John': 30}
>>>
>>>
>>> d2 = dict(d)
>>> d2
{'Mike': 40, 'John': 30}
>>>

 

还可使用关键字实参来调用这个函数:

>>> d = dict(name='Mike', age=40)
>>> d
{'name': 'Mike', 'age': 40}

 

二、基本的字典操作

字典的基本行为在很多方面都类似于序列。

 

>>> d = {'Mike': 40, 'John': 30}

1、len(d):返回字典d包含的项数。

>>> len(d)
2

2、d[k]:返回与键k相关联的值。如果不存在会发生异常。

>>> d['Mike']
40
>>> d['Mik']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Mik'

3、d[k] = v:将值v关联到键k。

>>> d['Mike'] = 50
>>> d
{'Mike': 50, 'John': 30}

4、del d[k]:删除键为k的项。如果不存在会发生异常。

>>> del d['Mike']
>>> d
{'John': 30}
>>> del d['Mik']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Mik'

5、k in d:检查字典d是否包含键为k的项。

>>> 'John' in d
True

 

三、字典方法

1、clear

方法clear删除所有的字典项。

>>> d = {'Mike': 40, 'John': 30}
>>> d.clear()
>>> d
{}

2、copy(浅拷贝)

方法copy返回一个新字典,这个方法执行的是浅拷贝,值本身是原件而非副本。

>>> x = {'username': 'admin', 'machines': ['a', 'b', 'c']}
>>> y = x.copy()
>>> y
{'username': 'admin', 'machines': ['a', 'b', 'c']}
>>> y['username'] = 'guido'
>>> y['machines'].remove('a')
>>> y
{'username': 'guido', 'machines': ['b', 'c']}
>>> x
{'username': 'admin', 'machines': ['b', 'c']}
>>>

如上所见,当替换副本中的值时,原件不受影响;

然而,如果修改副本中的值,原件也将发生变化。

3、deepcopy(深拷贝)

深拷贝会同时复制值及其包含的所有值。

>>> x = {'username': 'admin', 'machines': ['a', 'b', 'c']}
>>> from copy import deepcopy
>>> y = deepcopy(x)
>>> y['username'] = 'guido'
>>> y['machines'].remove('a')
>>> y
{'username': 'guido', 'machines': ['b', 'c']}
>>> x
{'username': 'admin', 'machines': ['a', 'b', 'c']}

4、fromkeys

方法fromkeys创建一个新字典,其中包含指定的键,且每个键对应的值都是None。

>>> dict.fromkeys(['name', 'age'])
{'name': None, 'age': None}

也可以提供默认值:

>>> dict.fromkeys(['name', 'age'], 'unknown')
{'name': 'unknown', 'age': 'unknown'}

5、get

方法get获取指定键对应的值,如果不存在则返回None,也可以指定默认值。

>>> d.get('Mike')
40
>>> d.get('Mik')
>>> d.get('Mik', 'N/A')
'N/A'

6、items

方法items返回一个字典视图,其中包含所有字典项,可用于迭代。其中每个元素都是(key, value)的形式。

可对视图进行长度以及成员资格的检查。

>>> d = {'Mike': 40, 'John': 30}
>>> d.items()
dict_items([('Mike', 40), ('John', 30)])
>>> it = d.items()
>>> len(it)
2
>>> ('Mike', 40) in it
True

也可以转换成列表。

>>> list(d.items())
[('Mike', 40), ('John', 30)]

7、keys

方法keys返回一个字典视图,其中包含指定字典中的键。

>>> d = {'Mike': 40, 'John': 30}
>>> d.keys()
dict_keys(['Mike', 'John'])

8、values

方法values返回一个字典视图,其中包含指定字典中的值。

>>> d = {'Mike': 40, 'John': 30}
>>> d.values()
dict_values([40, 30])

9、pop

方法pop可用于获取与指定键相关联的值,并将该键-值对从字典中删除。如果不存在会发生异常。

>>> d = {'Mike': 40, 'John': 30}
>>> d.pop('Mike')
40
>>> d
{'John': 30}
>>> d.pop('Mik')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Mik'

10、popitem

方法popitem随机地弹出一个字典项。从Python3.6开始会弹出最后一个元素。

>>> d = {'Mike': 40, 'John': 30, 'Jack': 20}
>>> d.popitem()
('Jack', 20)

11、setdefault

方法setdefault类似get,因为它也获取与指定键相关联的值。

>>> d = {'Mike': 40, 'John': 30, 'Jack': 20}
>>> d.setdefault('Mike')
40

如果字典不包含指定的键,则在字典中添加指定的键-值对,默认为None。

>>> d.setdefault('Mik')
>>> d
{'Mike': 40, 'John': 30, 'Jack': 20, 'Mik': None}
>>> d.setdefault('Jac', 18)
18
>>> d
{'Mike': 40, 'John': 30, 'Jack': 20, 'Mik': None, 'Jac': 18}

12、update

方法update使用一个字典中的项来更新另一个字典。

>>> d = {'Mike': 40, 'John': 30, 'Jack': 20}
>>> e = {'Mike': 50, 'Rose': 18}
>>> d.update(e)
>>> d
{'Mike': 50, 'John': 30, 'Jack': 20, 'Rose': 18}

如果当前字典包含键相同的项,就更新它。

如果当前字典不包含对应的项,就添加它。

 

四、遍历字典

1、遍历键值

>>> d = {'Mike': 40, 'John': 30, 'Jack': 20}
>>> for key in d:
...     print(key + ': ' + str(d[key]))
...
Mike: 40
John: 30
Jack: 20
>>>
>>>
>>> for key in d.keys():
...     print(key + ': ' + str(d[key]))
...
Mike: 40
John: 30
Jack: 20
for key infor key in d.keys() 这两种遍历方法在使用上是完全等价的。

2、遍历内容值

>>> for value in d.values():
...     print(value)
...
40
30
20

3、遍历字典项

>>> for key, value in d.items():
...     print(key + ': ' + str(value))
...
Mike: 40
John: 30
Jack: 20

 

五、将字符串格式设置功能用于字典

通过在字典中存储一系列命名的值,可让格式设置更容易些。

必须使用format_map来指出你将通过一个映射来提供所需的信息。

>>> d = {'Mike': 40, 'John': 30}
>>> "Mike's age is {Mike}".format_map(d)
"Mike's ange is 40"

 

posted on 2020-03-10 17:01  麦克煎蛋  阅读(268)  评论(0编辑  收藏  举报