当前位置:   article > 正文

Python——字典_字典的元素可以通过键来访问,也可以通过位置来访问。

字典的元素可以通过键来访问,也可以通过位置来访问。

一. 字典的特点

  • 列表是对象的有序集合,而字典是无序集。
  • 对于列表(其他复合数据类型也一样)来说,元素只有值;而对于字典,元素由 key:value 对的形式组成。
  • 字典中的元素通过 key 来访问,而非通过他们的位置来访问(主要区别)。
  • 字典是一个关联数组(也称为哈希),其中的任何 key 都与 value 相关联(或映射),所以字典是无序的 key:value 对。
  • value 可以是 Python 中的任何数据类型,key 必须不可变,可以用数字、字符串或元组充当。不能用列表。
  • 字典不支持序列数据类型(例如:字符串、元组和列表)的序列操作(例如:索引、切片、连接 +、重复 *),字典属于内置映射类型,同时也是该类型的唯一代表!

 

二. 创建和使用字典

 

1. 创建字典

语法格式如下:

                  d = {key1:value1, key2:value2}

  • 字典由多个键及其对应的值构成的对(把键 / 值对称为项)。
  • 将所有项(元素)放在花括号({})内,每个项之间以逗号(,)分隔,键值对用冒号(:)分隔。
  • 空字典(不包括任何项)由两个大括号组成,如{}。
  • 字典中的 key 必须是唯一的,但值不一定。
  • 值可以取任何数据类型;键必须不可变,可以用数字、字符串或元组充当,不能用列表。
  • key 重复时,虽然没有报错,但前面的值被后面的覆盖了
  1. >>>
  2. >>> dic = {} # 空字典
  3. >>> dic
  4. {}
  5. >>>
  6. >>> dic = {1:'Python', 2:'C++'} # key 是整形
  7. >>>
  8. >>>
  9. >>> dic = {'name':'python', 2:[1, 2, 3]} # key 是混合类型
  10. >>>
  11. >>> dic = dict([(1,'Python'), (2,'C++')]) # 使用 dict() 函数
  12. >>> dic
  13. {1: 'Python', 2: 'C++'}
  14. >>>
  15. >>> dic = {'name':'python', (1, 2):'C++'} # 具有不可变元素的元组
  16. >>>
  17. >>> {'name':'python', [1, 2]:'C++'} # 列表
  18. Traceback (most recent call last):
  19. File "<stdin>", line 1, in <module>
  20. TypeError: unhashable type: 'list'
  21. >>>
  22. >>> {'name':'Python', 'name':'C++'} # key 重复
  23. {'name': 'C++'}
  24. >>> #虽然没有报错,但前面的值被后面的覆盖了
  25. ...
  26. >>>

 

2. 访问字典元素

字典通过 key 来检索 value,有两种方式:

  • 在方括号([])内使用 key
  • key 与 get() 方法与一起使用

区别在于:使用 get(),如果没有找到 key,则返回 None,而不是 KeyError。

  1. >>> dict0 = {'name':'zth','age':20}
  2. >>>
  3. >>>
  4. >>> dict0['name']
  5. 'zth'
  6. >>>
  7. >>> dict0.get('age')
  8. 20
  9. >>>
  10. >>> dict0['zth'] # 没有找到 key,引发 KeyError
  11. Traceback (most recent call last):
  12. File "<stdin>", line 1, in <module>
  13. KeyError: 'zth'
  14. >>>
  15. >>> print(dict0.get(20)) # 没有找到 key,返回默认值
  16. None

 

3. dict()  函数

dict() 函数用于创建一个字典。

语法

  1. class dict(**kwarg)
  2. class dict(mapping, **kwarg)
  3. class dict(iterable, **kwarg)

参数说明:

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

返回值

返回一个字典。

  1. >>>dict() # 创建空字典
  2. {}
  3. >>> dict(a='a', b='b', t='t') # 传入关键字
  4. {'a': 'a', 'b': 'b', 't': 't'}
  5. >>> dict(zip(['one', 'two', 'three'], [1, 2, 3])) # 映射函数方式来构造字典
  6. {'three': 3, 'two': 2, 'one': 1}
  7. >>> dict([('one', 1), ('two', 2), ('three', 3)]) # 可迭代对象方式来构造字典
  8. {'three': 3, 'two': 2, 'one': 1}

 

三. 字典的基本操作

 

1. 更改或添加元素

字典是可变的,可以添加新元素,也可以使用赋值运算符(=)更改现有元素的值。

如果 key 存在,value 将被更新;否则,新的 key:value 对会被添加到字典中。

  1. >>> dict0 = {}
  2. >>>
  3. >>>
  4. >>> dict0['name'] = 'zth' # 添加项
  5. >>> dict0
  6. {'name': 'zth'}
  7. >>>
  8. >>> dict0['aeg'] = 21 # 添加项
  9. >>> dict0
  10. {'name': 'zth', 'aeg': 21}
  11. >>>
  12. >>> dict0['aeg'] = 20 # 更新
  13. >>> dict0
  14. {'name': 'zth', 'aeg': 20}

 

2. 删除字典或字典的项

通过使用 pop() 方法,可以删除指定 key 对应的元素,并返回其 value。

popitem() 方法可以用来删除并返回一个任意元素 (key, value)。

使用 del 关键字来删除单个元素或整个字典本身。

clear() 方法则会一次性删除所有元素。

  1. >>> dict0 = {'name': 'zth', 'age': 20, 'sex':'M', 'grade':None}
  2. >>>
  3. >>>
  4. >>> dict0.pop('grade') # 删除某一项
  5. >>> dict0
  6. {'name': 'zth', 'age': 20, 'sex': 'M'}
  7. >>>
  8. >>> dict0.popitem() # 删除任意一项
  9. ('sex', 'M')
  10. >>> dict0
  11. {'name': 'zth', 'age': 20}
  12. >>>
  13. >>>
  14. >>> del dict0['age'] # 删除某一项
  15. >>> dict0
  16. {'name': 'zth'}
  17. >>>
  18. >>> dict0.clear() # 清空 - 删除所有项
  19. >>> dict0
  20. {}
  21. >>>
  22. >>>
  23. >>> del dict0 # 删除字典
  24. >>> dict0
  25. Traceback (most recent call last):
  26. File "<stdin>", line 1, in <module>
  27. NameError: name 'dict0' is not defined

 

3. 成员测试

可以测试一个 key 是否存在于字典中,使用关键字 in。

注意: 成员测试仅适用于 key,不适用于 value。

  1. >>> dict0 = {'name': 'zth', 'aeg': 20, 'sex':'M'}
  2. >>>
  3. >>> 'name' in dict0
  4. True
  5. >>>
  6. >>> 'grade' in dict0
  7. False
  8. >>>
  9. >>> 'zth' in dict0 # 不能检测 value
  10. False
  11. >>>

 

4. 遍历字典

使用 for 循环,可以遍历字典中的每个 key。

  1. >>> dict0 = {'name': 'zth', 'aeg': 20, 'sex':'M'}
  2. >>>
  3. >>>
  4. >>> for key in dict0:
  5. ... print(key)
  6. ...
  7. name
  8. aeg
  9. sex

 

5. 字典内置函数

 

函数描述
all()如果字典的所有 key 都是 True(或者字典为空),返回 True。
any()用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。
len()返回字典的长度(元素个数)
sorted()返回一个新的排序字典(不排序字典本身)
str(dict)输出字典,以可打印的字符串表示。
type()返回输入的变量类型,如果变量是字典就返回字典类型。
  1. >>> dict0 = {'name': 'zth', 'aeg': 20, 'sex':'M'}
  2. >>>
  3. >>> all(dict0)
  4. True
  5. >>>
  6. >>> all({'name': 'zth', 0:20})
  7. False
  8. >>>
  9. >>>
  10. >>> any({'name': 'zth', 0:20})
  11. True
  12. >>>
  13. >>> any({():23, 0:20})
  14. False
  15. >>>
  16. >>>
  17. >>> len(dict0)
  18. 3
  19. >>> sorted(dict0)
  20. ['aeg', 'name', 'sex']
  21. >>>
  22. >>> str(dict0)
  23. "{'name': 'zth', 'aeg': 20, 'sex': 'M'}"
  24. >>>
  25. >>>
  26. >>> type(dict0)
  27. <class 'dict'>

6. 字典的格式化字符串

字典的格式化方式是在每个转化说明符中的 % 字符后加上用圆括号括起来的键,再跟上其他说明元素。

  1. >>> dict0 = {'name': 'zth', 'aeg': 20, 'sex':'M'}
  2. >>>
  3. >>> print('姓名: %(name)s'%dict0)
  4. 姓名: zth

 

四. 字典方法

1. clear() 方法

clear() 函数用于删除字典内所有元素。

clear()方法语法:

dict.clear()
  • 参数: 无。
  • 返回值: 该函数没有任何返回值。

 

2. copy()

 

Python 字典 copy() 函数返回一个字典的浅复制。

copy()方法语法:

  dict.copy()

  • 参数: 无。

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

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. dict1 = {'user':'zth','num':[1,2,3]}
  4. dict2 = dict1 # 浅拷贝: 引用对象
  5. dict3 = dict1.copy() # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
  6. # 修改 data 数据
  7. dict1['user']='root'
  8. dict1['num'].remove(1)
  9. # 输出结果
  10. print(dict1)
  11. print(dict2)
  12. print(dict3)
  13. print('\n\n')
  14. dict3['user'] = 'fbb'
  15. print('dict1: ',dict1)
  16. print('dict3: ',dict3)
  17. print('\n\n')
  18. dict3['num'].remove(2)
  19. print('dict1: ',dict1)
  20. print('dict3: ',dict3)
  21. print('\n\n')
  22. print('dict2: ',dict2)

执行结果:

  1. pydev debugger: starting (pid: 1432)
  2. {'user': 'root', 'num': [2, 3]}
  3. {'user': 'root', 'num': [2, 3]}
  4. {'user': 'zth', 'num': [2, 3]}
  5. dict1: {'user': 'root', 'num': [2, 3]}
  6. dict3: {'user': 'fbb', 'num': [2, 3]}
  7. dict1: {'user': 'root', 'num': [3]}
  8. dict3: {'user': 'fbb', 'num': [3]}
  9. dict2: {'user': 'root', 'num': [3]}
  • 赋值:浅拷贝, 引用对象。
  • copy:浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
  • 替换副本的值时,原始字典不受影响。
  • 如果修改了副本某个值(原地修改,不是替换),原始字典就会改变,因为同样的值也在原字典中。

 

3. fromkeys()

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

fromkeys()方法语法:

   dict.fromkeys(seq[, value])

参数

  • seq -- 字典键值列表。
  • value -- 可选参数, 设置键序列(seq)的值。

返回值

该方法返回列表。

  1. >>> seq = ( 'name','age','sex')
  2. >>>
  3. >>> dict1 = dict.fromkeys(seq)
  4. >>> dict1
  5. {'name': None, 'age': None, 'sex': None}
  6. >>>
  7. >>>
  8. >>> dict1 = dict.fromkeys(seq,10)
  9. >>>
  10. >>> dict1
  11. {'name': 10, 'age': 10, 'sex': 10}

 

4. get()

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

get()方法语法:

      dict.get(key, default=None)

参数

  • key -- 字典中要查找的键。
  • default -- 如果指定键的值不存在时,返回该默认值值。

返回值

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

  1. >>> dict1 = {'Name': 'zth', 'Age': 20}
  2. >>>
  3. >>> print(dict1.get('Name'))
  4. zth
  5. >>>
  6. >>> print(dict1.get('sex'))
  7. None
  8. >>>
  9. >>> print(dict1.get('sex','未指定'))
  10. 未指定

 

5.  key in dict  方法

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

语法

in 操作符语法:

key in dict

参数

  • key -- 要在字典中查找的键。

返回值

如果键在字典里返回true,否则返回false。

  1. >>> student={'小萌': '1001', '小智': '1002'}
  2. >>> print('小萌在student字典中:%s'%('小萌' in student))
  3. 小萌在student字典中:True
  4. >>> print('小强在student字典中:%s'%('小强' in student))
  5. 小强在student字典中:False

 

6. items()

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

items()方法语法:

    dict.items()

  • 参数: 无
  • 返回值: 返回可遍历的(键, 值) 元组数组。
  1. >>> dict0 = {'name': 'zth', 'aeg': 20}
  2. >>>
  3. >>> dict0.items()
  4. dict_items([('name', 'zth'), ('aeg', 20)])

 

7. keys()

Python3 字典 keys() 方法返回一个迭代器,可以使用 list() 来转换为列表。

注意:Python2.x 是直接返回列表

keys()方法语法:

  dict.keys()

  • 参数: 无
  • 返回值: 返回一个迭代器。
  1. >>> dict0 = {'name': 'zth', 'aeg': 20}
  2. >>>
  3. >>> dict0.keys()
  4. dict_keys(['name', 'aeg'])
  5. >>>
  6. >>>
  7. >>> list(dict0.keys())
  8. ['name', 'aeg']

 

8. setdefault()

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

setdefault()方法语法:

  dict.setdefault(key, default=None)

参数

  • key -- 查找的键值。
  • default -- 键不存在时,设置的默认键值。

返回值

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

  1. >>> dict0 = {'name': 'zth', 'aeg': 20}
  2. >>>
  3. >>> dict0.setdefault('name')
  4. 'zth'
  5. >>>
  6. >>> dict0.setdefault('sex')
  7. >>> print( dict0.setdefault('sex'))
  8. None
  9. >>>
  10. >>> print( dict0.setdefault('sex','M'))
  11. None
  12. >>>
  13. >>> print( dict0.setdefault('grade','86'))
  14. 86
  15. >>> dict0
  16. {'name': 'zth', 'aeg': 20, 'sex': None, 'grade': '86'}

 

9. update()

update() 函数把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里。

update() 方法语法:

dict.update(dict2)
  • 参数:dict2 -- 添加到指定字典dict里的字典。
  • 返回值:该方法没有任何返回值。

 

10. vaules()

values() 方法返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值。

values()方法语法:

  dict.values()

  • 参数: 无
  • 返回值: 返回迭代器。
  1. >>> dict0 = {'name': 'zth', 'aeg': 20}
  2. >>>
  3. >>> dict0.values()
  4. dict_values(['zth', 20])
  5. >>>
  6. >>>
  7. >>> list(dict0.values())
  8. ['zth', 20]

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/515578
推荐阅读
相关标签
  

闽ICP备14008679号