一、字典

字典是Python提供的一种数据类型,用于存放有映射关系的数据,字典相当于两组数据,其中一组是key,是关键数据(程序对字典的操作都是基于key),另一组数据是value,可以通过key来进行访问。如图:

1、创建字典

通过Python内置函数help()查看帮助:

  1. >>> help(dict)
  2. Help on class dict in module builtins:
  3.  
  4. class dict(object)
  5. | dict() -> new empty dictionary
  6. | dict(mapping) -> new dictionary initialized from a mapping object's
  7. | (key, value) pairs
  8. | dict(iterable) -> new dictionary initialized as if via:
  9. | d = {}
  10. | for k, v in iterable:
  11. | d[k] = v
  12. | dict(**kwargs) -> new dictionary initialized with the name=value pairs
  13. | in the keyword argument list. For example: dict(one=1, two=2)
  14. |
  15. | Methods defined here:
  16. |
  17. | __contains__(self, key, /)
  18. | True if the dictionary has the specified key, else False.
  19. |
  20. | __delitem__(self, key, /)
  21. | Delete self[key].
  22. |
  23. | __eq__(self, value, /)
  24. | Return self==value.
  25. |
  26. | __ge__(self, value, /)
  27. | Return self>=value.
  28. |
  29. | __getattribute__(self, name, /)
  30. | Return getattr(self, name).
  31. |
  32. | __getitem__(...)
  33. | x.__getitem__(y) <==> x[y]
  34. |
  35. | __gt__(self, value, /)
  36. | Return self>value.
  37. |
  38. | __init__(self, /, *args, **kwargs)
  39. | Initialize self. See help(type(self)) for accurate signature.
  40. |
  41. | __iter__(self, /)
  42. | Implement iter(self).
  43. |
  44. | __le__(self, value, /)
  45. | Return self<=value.
  46. |
  47. | __len__(self, /)
  48. | Return len(self).
  49. |
  50. | __lt__(self, value, /)
  51. | Return self<value.
  52. |
  53. | __ne__(self, value, /)
  54. | Return self!=value.
  55. |
  56. | __repr__(self, /)
  57. | Return repr(self).
  58. |
  59. | __setitem__(self, key, value, /)
  60. | Set self[key] to value.
  61. |
  62. | __sizeof__(...)
  63. | D.__sizeof__() -> size of D in memory, in bytes
  64. |
  65. | clear(...)
  66. | D.clear() -> None. Remove all items from D.
  67. |
  68. | copy(...)
  69. | D.copy() -> a shallow copy of D
  70. |
  71. | get(self, key, default=None, /)
  72. | Return the value for key if key is in the dictionary, else default.
  73. |
  74. | items(...)
  75. | D.items() -> a set-like object providing a view on D's items
  76. |
  77. | keys(...)
  78. | D.keys() -> a set-like object providing a view on D's keys
  79. |
  80. | pop(...)
  81. | D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
  82. | If key is not found, d is returned if given, otherwise KeyError is raised
  83. |
  84. | popitem(...)
  85. | D.popitem() -> (k, v), remove and return some (key, value) pair as a
  86. | 2-tuple; but raise KeyError if D is empty.
  87. |
  88. | setdefault(self, key, default=None, /)
  89. | Insert key with a value of default if key is not in the dictionary.
  90. |
  91. | Return the value for key if key is in the dictionary, else default.
  92. |
  93. | update(...)
  94. | D.update([E, ]**F) -> None. Update D from dict/iterable E and F.
  95. | If E is present and has a .keys() method, then does: for k in E: D[k] = E[k]
  96. | If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v
  97. | In either case, this is followed by: for k in F: D[k] = F[k]
  98. |
  99. | values(...)
  100. | D.values() -> an object providing a view on D's values
  101. |
  102. | ----------------------------------------------------------------------
  103. | Class methods defined here:
  104. |
  105. | fromkeys(iterable, value=None, /) from builtins.type
  106. | Create a new dictionary with keys from iterable and values set to value.
  107. |
  108. | ----------------------------------------------------------------------
  109. | Static methods defined here:
  110. |
  111. | __new__(*args, **kwargs) from builtins.type
  112. | Create and return a new object. See help(type) for accurate signature.
  113. |
  114. | ----------------------------------------------------------------------
  115. | Data and other attributes defined here:
  116. |
  117. | __hash__ = None

  

通过帮助文档,可以看到,程序可以使用花括号或者dict()函数创建字典,
花括号创建字典,例:

  1. # 使用花括号创建字典
  2. a = {'小红':'学霸','小黑':'学渣','老王':'班主任'}
  3. print (a)
  4. # 打印 {'小红': '学霸', '小黑': '学渣', '老王': '班主任'}
  5.  
  6. # 使用花括号创建空字典
  7. b = {}
  8. print (b)
  9. # 打印 {}
  10.  
  11. # 字典嵌套
  12. c = {'学生':{'小红':'学霸','小黑':'学渣'},'老师':{'老王':'班主任'}}
  13. print (c)
  14. # 打印 {'学生': {'小红': '学霸', '小黑': '学渣'}, '老师': {'老王': '班主任'}}
  15. print (c['学生'])
  16. # 打印 {'小红': '学霸', '小黑': '学渣'}
  17.  
  18. # 元组作为字典的key
  19. d = {('级长','班主任'):'老王',('学生','委员'):'小红'}
  20. print (d)
  21. # 打印 {('级长', '班主任'): '老王', ('学生', '委员'): '小红'}
  22. print (d[('学生', '委员')])
  23. # 打印 '小红'

使用dict函数创建字典,例:

  1. # 创建空字典
  2. e = dict()
  3. print (e)
  4. # 打印 {}
  5.  
  6. # 使用dict指定关键字参数创建字典,key不允许使用表达式
  7. f = dict(k1 = 1,k2 = 'v2')
  8. print (f)
  9. # 打印 {'k1': 1, 'k2': 'v2'}
  10.  
  11. # 使用dict指定关键字参数创建字典,key使用表达式
  12. y = dict(1=1,2=2)
  13. # 报错:SyntaxError: keyword can't be an expression
  14.  
  15. # 创建两个键值对字典
  16. h1 = [('k1',1),('k2',2)]
  17. h = dict(h1)
  18. print (h1)
  19. # 打印 {'k1': 1, 'k2': 2}
  20.  
  21. # 创建三个键值对字典
  22. i1 = [['j1',1],['j2',2],['j3',3]]
  23. i = dict(i1)
  24. print (i)
  25. # 打印 {'j1': 1, 'j2': 2, 'j3': 3}

2、字典用法

- 通过key访问value

  1. a = {'小红':'学霸','小黑':'学渣','老王':'班主任'}
  2. # 通过key访问value
  3. print (a['小红'])
  4. # 打印 学霸
  5.  
  6. c = {'学生':{'小红':'学霸','小黑':'学渣'},'老师':{'老王':'班主任'}}
  7. # 访问字典嵌套字典的value
  8. c1 = c['学生']
  9. print (c1)
  10. # 打印 {'小红': '学霸', '小黑': '学渣'}
  11. print (c1['小红'])
  12. # 打印 学霸

  

- 通过key添加键值对

  1. # 创建字典
  2. n = dict(k1 = 1,k2 = 2,k3 = 3)
  3.  
  4. # 通过key添加key-value对(需要为不存在的key赋值,如果已存在,会被覆盖)
  5. n['k4'] = 4
  6. print (n)
  7. # 打印 {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}

  

- 通过key修改键值对

  1. m = {'k1': 1, 'k2': 2, 'k3': 3}
  2.  
  3. # 如果key已存在,则新的value会覆盖原来的value
  4. m['k1'] = '覆盖'
  5. print (m)
  6. # 打印 {'k1': '覆盖', 'k2': 2, 'k3': 3}

  

- 通过in或not in运算符判断字典是否包含指定的key

  1. p = {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
  2.  
  3. # 判断p是否包含名为'k1'的key
  4. print ('k1' in p)
  5. # 打印 True
  6. print ('k1' not in p)
  7. # 打印 False
  8.  
  9. #判断p是否包含名为'k5'的key
  10. print ('k5' in p)
  11. # 打印 False
  12. print ('k5' not in p)
  13. # 打印 True

3、字典的常用方法

我们可以在Python交互模式中,输入dir(dict)查看dict类包含哪些方法,
例:

  1. >>> dir(dict)
  2. ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

1)、clear()  

用于清除一个字典的键值对,当一个字典执行clean()之后,这个字典将会变为空字典。

  1. >>> help(dict.clear)
  2. Help on method_descriptor:
  3.  
  4. clear(...)
  5. D.clear() -> None. Remove all items from D. 

例:

  1. c = dict(k1 = 1,k2 = 2)
  2. c.clear()
  3. print(c)
  4. # 打印 {}

2)、copy()  

可复制一个字典的键值对。

  1. >>> help(dict.copy)
  2. Help on method_descriptor:
  3.  
  4. copy(...)
  5. D.copy() -> a shallow copy of D

例:

  1. c = dict(k1 = 1,k2 = 2)
  2. d = c.copy()
  3. print(d)
  4. # 打印 {'k1': 1, 'k2': 2}

3)、fromkeys() 

使用给定的多个key创建字典,这些key对应的value默认为None,该方法一般会使用dict类直接调用(字典对象调用没有什么意义)。

  1. >>> help(dict.fromkeys)
  2. Help on built-in function fromkeys:
  3.  
  4. fromkeys(iterable, value=None, /) method of builtins.type instance
  5. Create a new dictionary with keys from iterable and values set to value.

例:

  1. a = (['k1','k2','k3'])
  2. b = dict.fromkeys(a)
  3. print(b)
  4. # 打印 {'k1': None, 'k2': None, 'k3': None}
  5.  
  6. # 传入'test'作为默认的value
  7. d = (['k1','k2','k3'])
  8. e = dict.fromkeys(d,'test')
  9. print(e)
  10. # 打印 {'k1': 'test', 'k2': 'test', 'k3': 'test'}

  

4)、get()

如果key在字典中,则返回key对应的value值,否则返回default默认参数None。

  1. >>> help(dict.get)
  2. Help on method_descriptor:
  3.  
  4. get(self, key, default=None, /)
  5. Return the value for key if key is in the dictionary, else default.

例:

  1. a = dict(k1 = 1, k2 =2)
  2. print(a.get('k1'))
  3. # 打印 1
  4.  
  5. print(a.get('k10'))
  6. # 打印 None
  7.  
  8. # 传入“Not_found”作为默认的default
  9. print(a.get('k10','Not_found'))
  10. # 打印 Not_found

  

5)、items()

用于获取字典中的所有键值对,返回dict_items对象。

  1. >>> help(dict.items)
  2. Help on method_descriptor:
  3.  
  4. items(...)
  5. D.items() -> a set-like object providing a view on D's items

例:

  1. a = dict(k1 =1,k2 = 2)
  2. print(a.items())
  3. # 打印 dict_items([('k1', 1), ('k2', 2)])
  4.  
  5. # 将dict_items转换成list
  6. print(list(a.items()))
  7. # 打印 [('k1', 1), ('k2', 2)]

 

6)、keys()

用于返回字典中的所有key,返回dict_keys对象。

  1. >>> help(dict.keys)
  2. Help on method_descriptor:
  3.  
  4. keys(...)
  5. D.keys() -> a set-like object providing a view on D's keys

例:

  1. a = dict(k1 =1,k2 = 2)
  2. print(a.keys())
  3. # 打印 dict_keys(['k1', 'k2'])
  4.  
  5. # 将dict_keys转换成list
  6. print(list(a.keys()))
  7. # 打印 ['k1', 'k2']

  

7)、values()

用于返回字典中的所有value,返回dict_values对象。

  1. >>> help(dict.values)
  2. Help on method_descriptor:
  3.  
  4. values(...)
  5. D.values() -> an object providing a view on D's values

例:

  1. a = dict(k1 =1,k2 = 2)
  2. print(a.values())
  3. # 打印 dict_values([1, 2])
  4.  
  5. # 将dict_values转换为list
  6. print(list(a.values()))
  7. # 打印 [1, 2]

  

8)、popitem()

用于随机删除字典中的一个键值对,实际上字典的popitem()方法总是弹出底层存储的最后一个键值对。

  1. >>> help(dict.popitem)
  2. Help on method_descriptor:
  3.  
  4. popitem(...)
  5. D.popitem() -> (k, v), remove and return some (key, value) pair as a
  6. 2-tuple; but raise KeyError if D is empty.

例:

  1. a = dict(k1 =1,k2 = 2,k3 = 3,k4 = 4,k5 = 5)
  2. print(a.popitem())
  3. # 打印 ('k5', 5)
  4. print(a)
  5. # 打印 {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}

 

9)、setdefault()

用于根据key获取对应的value,如果key在字典中不存在时,会先给这个key设置一个默认的value,再返回这个key对应的value。

  1. >>> help(dict.setdefault)
  2. Help on method_descriptor:
  3.  
  4. setdefault(self, key, default=None, /)
  5. Insert key with a value of default if key is not in the dictionary.
  6.  
  7. Return the value for key if key is in the dictionary, else default.

例:

  1. a = dict(k1 =1,k2 = 2)
  2. print(a.setdefault('k1'))
  3. # 打印 1
  4.  
  5. print(a.setdefault('k10'))
  6. # 打印 None
  7.  
  8. # 传入‘test’作为默认的default
  9. print(a.setdefault('k11','test'))
  10. #打印 test
  11. print(a)
  12. # 打印 {'k1': 1, 'k2': 2, 'k10': None, 'k11': 'test'}

  

10)、update()

在一个字典中,可根据key对已存在的键值对进行覆盖,如果key不存在,则该键值对会被添加进字典。

  1. >>> help(dict.update)
  2. Help on method_descriptor:
  3.  
  4. update(...)
  5. D.update([E, ]**F) -> None. Update D from dict/iterable E and F.
  6. If E is present and has a .keys() method, then does: for k in E: D[k] = E[k]
  7. If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v
  8. In either case, this is followed by: for k in F: D[k] = F[k]

例:

  1. a = dict(k1 =1,k2 = 2)
  2. # 根据key对已存在的key-value,覆盖value
  3. a.update(k1 = 3)
  4. print(a)
  5. # 打印 {'k1': 3, 'k2': 2}
  6.  
  7. # key不存在,该键值对会被添加进字典
  8. a.update(k3 = 10)
  9. print(a)
  10. # 打印 {'k1': 3, 'k2': 2, 'k3': 10}

  

11)、pop()

用于根据key获取对应的value,并且删除该键值对。

  1. >>> help(dict.pop)
  2. Help on method_descriptor:
  3.  
  4. pop(...)
  5. D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
  6. If key is not found, d is returned if given, otherwise KeyError is raised

例:

  1. a = dict(k1 =1,k2 = 2,k3 = 3,k4 = 4,k5 = 5)
  2. print(a.pop('k1'))
  3. # 打印 1
  4. print(a)
  5. # 打印 {'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5}

4、注意事项

列表不允许对不存在的索引赋值,但字典允许对不存在的键赋值。
例:

  1. p = [1,2,3,4,5]
  2. # 对不存在的索引赋值
  3. p[5] = 666
  4. # 报错 IndexError: list assignment index out of range
  5.  
  6. q = dict(a=1,b=2)
  7. # 对不存在的key赋值
  8. q['c'] = 3
  9. print (q)
  10. # 打印 {'a': 1, 'b': 2, 'c': 3}

  

Python——字典dict()详解的更多相关文章

  1. Python - 字典(dict) 详解 及 代码

    字典(dict) 详解 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/17291329 字典(dict)是表示映射的数据 ...

  2. Python中dict详解

    from:http://www.cnblogs.com/yangyongzhi/archive/2012/09/17/2688326.html Python中dict详解 python3.0以上,pr ...

  3. python 字典操作方法详解

    字典是一种通过名字或者关键字引用的得数据结构,key 类型需要时被哈希,其键可以是数字.字符串.元组,这种结构类型也称之为映射.字典类型是Python中唯一內建的映射类型. 注意,浮点数比较很不精确, ...

  4. python字典操作方法详解

    前言 字典是一种通过名字或者关键字引用的得数据结构,key 类型需要时被哈希,其键可以是数字.字符串.元组,这种结构类型也称之为映射.字典类型是Python中唯一內建的映射类型. 注意,浮点数比较很不 ...

  5. python——Container之字典(dict)详解

    字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型.列表是有序的对象结合,字典是无序的对象集合.两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取. ...

  6. 字典dict详解

    字典也是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据. 比如有份成绩表数据,语文:79,数学:80,英语:92,这组数据看上去像两个列表,但这两个列表的元素之间有一定的关联关 ...

  7. python 列表操作方法详解

    列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表是一个数据的集合,集合内可以放任何数据类型,可对集合方便的增删改查操作.Python已经内置确定序列的长度以及确定最大和最 ...

  8. python/ORM操作详解

    一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...

  9. python之数据类型详解

    python之数据类型详解 二.列表list  (可以存储多个值)(列表内数字不需要加引号) sort s1=[','!'] # s1.sort() # print(s1) -->['!', ' ...

随机推荐

  1. JAVA获取本周 本月 本年 第一天和最后一天

    /** * 日期工具类 */ public class DateUtils { /** * 获取今天 * @return String * */ public static String getTod ...

  2. Visio画图(一):UML用例图

    Visio画图(一):UML用例图 1.找到UML用例图 A.有网状态 第一步 在搜索框内输入用例图进行搜索. 第二步,移动鼠标直到找到用例图 B.无网状态 第一步 点击特别推荐旁的类别选项 第二步 ...

  3. Nacos深入浅出(三)

    EventDispatcher.fireEvent(new ConfigDataChangeEvent(true, dataId, group, tenant, time.getTime())); 跟 ...

  4. Node.js 第三方包的安装、升级、卸载,以及包依赖管理

    本地安装: npm install package-name 全局全装: npm install -g  package-name 举个栗子 全局安装 React项目的脚手架 npm install ...

  5. Swing 100行画图示例

    关键内容,可以自行扩展 package main; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt ...

  6. [软件工程基础]Alpha 阶段发布说明

    新功能 增加了题库界面,其上有历届考试资料 系统已知的问题和限制 物理实验报告的收藏功能还无法使用 物理实验报告还不能评论 题库界面显示有些问题 最主要的生成实验报告功能在绝大多数安卓平台上显示&qu ...

  7. Codeforces 161A(贪心)

    要点 我在想贪心是对的那要二分图何用,自己的想法是:二分图最开始并不知道怎么匹配最好所以就按输入顺序连了,之后慢慢修改:而这道匹配也成对匹配但从一开始你就可以知道选哪个最划算,就是贪心地选最小的.不必 ...

  8. git 本地新建分支Push到远程

    1. 本地新建分支,并切换到新的分支 git branch local_branch; git checkout local_branch; 2.第一条的命令也可以简单的一条命令来替代 git che ...

  9. AI入门丨开源学习资源推荐

    现在AI大热,网上的资源也非常多,让人眼花缭乱.非科班的我,经过半年的摸索,也算马马虎虎入了坑.下面整理了我认为不错的学习资源,大部分我都看过,以分享给更多的人.我会不断保持更新,也欢迎大家补充. P ...

  10. 拖拽调整Div大小

    今天写了一天这个jquery插件: 可以实现对div进行拖拽来调整大小的功能. (function ($) { $.fn.dragDivResize = function () { var delta ...