2.7 字典

&、字典是许多值的集合,索引可以使用许多不同的数据类型,不只是整数,可以是数、字符串或元组。

&、字典的索引被称为“键”,键及其关联的值称为“键-值”对,这种键-值对也称为项。

&、字典是python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下。

&、字典中的项不排序,所以不能像列表那样切片;访问字典中不存在的键时,将会报错。

2.7.1 创建字典

--- 字典可使用花括号创建,每个键及值之间用冒号分隔,项之间用逗号分隔;空字典只用两个花括号表示,花括号内没有任何项。

--- 可是用函数dict从其它映射或键值对序列创建字典。

  1. >>> dic_1 = {'name': 'LiMing', 'age': 20}
  2. >>> items = [('name', 'Maly'), ('age', 18)]
  3. >>> dic_2 = dict(items)

--- 可以使用关键字实参来调用dict函数。

  1. >>> dict_3 = dict(name = 'Grubby', age = 25)
  2. >>> dict_3
  3. {'name': 'Grubby', 'age': 25}
  4. >>>

2.7.2 基础操作

--- 方法keys()、values()、items()分别返回对应的字典的键、值和键值对的值。

--- 返回的值类似于列表但不是列表,不能被修改,  分别是dict_keys、dict_values 和 dict_items类型,可用于for循环。

  1. >>> dic = {'a':1, 'b':2, 'c':3}
  2. >>> dic.keys()
  3. dict_keys(['a', 'b', 'c'])
  4. >>> dic.values()
  5. dict_values([1, 2, 3])
  6. >>> dic.items()
  7. dict_items([('a', 1), ('b', 2), ('c', 3)])
  8. >>> type(dic.keys())
  9. <class 'dict_keys'>
  10. >>> type(dic.values())
  11. <class 'dict_values'>
  12. >>> type(dic.items())
  13. <class 'dict_items'>
  14. >>>

--- len(dic)返回字典dic包含的项数。

--- dic[key]返回字典dic中键key对应的值。

--- dic[key]=value将字典dic中键key的值更新为value,如原字典dic中没有该键key,则增加该项到字典dic中。

--- del dic[key]将删除字典dic中键key的项(键值对)。

  1. 1 >>> dic = {'a':1, 'b':2, 'c':3}
  2. 2 >>> len(dic)
  3. 3 3
  4. 4 >>> dic['b']
  5. 5 2
  6. 6 >>> dic['c'] = 5
  7. 7 >>> dic
  8. 8 {'a': 1, 'b': 2, 'c': 5}
  9. 9 >>> del dic['a']
  10. 10 >>> dic
  11. 11 {'b': 2, 'c': 5}
  12. 12 >>>
  13. 13 >>> dic['f'] = 10
  14. 14 >>> dic
  15. 15 {'b': 2, 'c': 5, 'f': 10}
  16. 16 >>>

--- 成员资格,使用in和not in操作符判定。

  1. >>> dic = {'a':1, 'b':2, 'c':3}
  2. >>> 'b' in dic.keys()
  3. True
  4. >>> 'f' in dic.keys()
  5. False
  6. >>> 'b' in dic.values()
  7. False
  8. >>> '' in dic.values()
  9. False
  10. >>> 3 in dic.values()
  11. True
  12. >>>

2.7.3 常用方法

--- get()方法:如果试图访问字典中没有的项,将引发错误,使用方法get,则很好的解决该问题。方法get有两个参数,第一个是要取得其值的键,必选;第二个是字典中没有要访问的项时返回的值,可选,不选时默认返回None。

  1. >>> dic = {'a':1, 'b':2, 'c':3}
  2. >>> print(dic['f'])
  3. Traceback (most recent call last):
  4. File "<stdin>", line 1, in <module>
  5. KeyError: 'f'
  6. >>> print(dic.get('f'))
  7. None
  8. >>> print(dic.get('b'))
  9. 2
  10. >>> print(dic.get('f', 'N/A'))
  11. N/A
  12. >>>

--- setdefault()方法:该方法设置字典中要检测的键的默认值。两个参数,第一个参数是要设置的键;第二个参数是,如果字典中没有该项,则该参数赋给该项并返回该值,如果字典中有该项则返回该项中的值。

  1. >>> dic = {'a':1, 'b':2, 'c':3}
  2. >>> print(dic)
  3. {'a': 1, 'b': 2, 'c': 3}
  4. >>> print(dic.setdefault('b', 100))
  5. 2
  6. >>> print(dic)
  7. {'a': 1, 'b': 2, 'c': 3}
  8. >>> print(dic.setdefault('f', 200))
  9. 200
  10. >>> print(dic)
  11. {'a': 1, 'b': 2, 'c': 3, 'f': 200}
  12. >>>

--- keys()方法和values()方法:分别返回一个字典视图,分别包含字典中的所有键和字典中的所有值。

  1. >>> dic = {'a':1, 'b':2, 'c':3}
  2. >>> print(dic.keys())
  3. dict_keys(['a', 'b', 'c'])
  4. >>> print(dic.values())
  5. dict_values([1, 2, 3])
  6. >>>

--- items()方法:返回一个包含所有字典项的字典视图,其中每个元素都为(key,values)的形式。

  1. >>> dic = {'a':1, 'b':2, 'c':3}
  2. >>> print(dic.items())
  3. dict_items([('a', 1), ('b', 2), ('c', 3)])
  4. >>> print(len(dic.items()))
  5. 3
  6. >>> print(list(dic.items()))
  7. [('a', 1), ('b', 2), ('c', 3)]
  8. >>>

--- pop()方法:获取与指定键相关联的值,并将该项从字典中删除。

  1. >>> dic = {'a':1, 'b':2, 'c':3}
  2. >>> print(dic.pop('c'))
  3. 3
  4. >>> print(dic)
  5. {'a': 1, 'b': 2}
  6. >>>

---popitem()方法:类似list.pop(),list.pop()弹出列表中的最后一个元素,popitem()随机弹出一个字典项。

  1. >>> dic = {'a':1, 'b':2, 'c':3}
  2. >>> print(dic.popitem())
  3. ('c', 3)
  4. >>> print(dic)
  5. {'a': 1, 'b': 2}
  6. >>>

--- formkeys()方法:创建一个新字典,包含指定的键,且每个键对应的值默认是None,也可指定一个值。

  1. >>> print(dic.fromkeys(['a','b']))
  2. {'a': None, 'b': None}
  3. >>> print(dic.fromkeys(['a','b'], 'N/A'))
  4. {'a': 'N/A', 'b': 'N/A'}
  5. >>>

--- copy()方法:执行浅复制,返回一个新字典,包含的项与原来的字典相同。

  1. >>> dic_1 = {'a':1, 'b':2, 'c':3}
  2. >>> dic_2 = dic_1.copy()
  3. >>> print(dic_1)
  4. {'a': 1, 'b': 2, 'c': 3}
  5. >>> print(dic_2)
  6. {'a': 1, 'b': 2, 'c': 3}
  7. >>> dic_1['c'] = 99
  8. >>> print(dic_1)
  9. {'a': 1, 'b': 2, 'c': 99}
  10. >>> print(dic_2)
  11. {'a': 1, 'b': 2, 'c': 3}
  12. >>> del dic_1['a']
  13. >>> print(dic_1)
  14. {'b': 2, 'c': 99}
  15. >>> print(dic_2)
  16. {'a': 1, 'b': 2, 'c': 3}
  17. >>>

--- clear()方法:删除所有的字典项,并返回None。

  1. >>> dic = {'a':1, 'b':2, 'c':3}
  2. >>> print(dic)
  3. {'a': 1, 'b': 2, 'c': 3}
  4. >>> print(dic.clear())
  5. None
  6. >>> print(dic)
  7. {}
  8. >>>

Lesson 2-4(字典)的更多相关文章

  1. 【cf842D】Vitya and Strange Lesson(01字典树)

    D. Vitya and Strange Lesson 题意 数列里有n个数,m次操作,每次给x,让n个数都异或上x.并输出数列的mex值. 题解 01字典树保存每个节点下面有几个数,然后当前总异或的 ...

  2. Vitya and Strange Lesson CodeForces - 842D 字典树+交换节点

    题意: Today at the lesson Vitya learned a very interesting function - mex. Mex of a sequence of number ...

  3. codeforces 842 D. Vitya and Strange Lesson(01字典树+思维+贪心)

    题目链接:http://codeforces.com/contest/842/problem/D 题解:像这种求一段异或什么的都可以考虑用字典树而且mex显然可以利用贪心+01字典树,和线段树差不多就 ...

  4. 【DG】Oracle_Data_Guard官方直译

    [DG]Oracle Data Guard官方直译 1 Oracle Data Guard 介绍   Oracle Data Guard概念和管理10g版本2   Oracle Data Guard ...

  5. DVWA实验之Brute Force(暴力破解)- Low

    DVWA实验之Brute Force-暴力破解- Low     这里开始DVWA的相关实验~   有关DVWA环境搭建的教程请参考: https://www.cnblogs.com/0yst3r-2 ...

  6. Oracle错误览表

    Oracle 错误总结及问题解决 ORA     本文转自:https://www.cnblogs.com/zhangwei595806165/p/4972016.html  作者@承影剑 ORA-0 ...

  7. CodeForeces 842d Vitya and Strange Lesson ——(带lazy标记的01字典树)

    给一个序列,每次操作对这个序列中的所有数异或一个x,问每次操作完以后整个序列的mex值. 做法是去重后构建01字典树,异或x就是对root加一个x的lazy标志,每次pushDown时如果lazy的这 ...

  8. dictionary(字典)

    dictionary(字典):   字典对象   字典是一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划.字母来查对应页的详细内容. 1.      dic={"n ...

  9. 7、字典和string的用法

    #dic={1:'alex','age':35,'hobby':{'girl_name':'铁锤','age':45},'is_handsome':True} # dic={'age':'alex', ...

随机推荐

  1. setData 和 直接赋值的区别

    wxml: <view> <block wx:for="{{dataArray}}" wx:key="id"> <v-book b ...

  2. C语言博客作业04--数组

    1.本章学习总结 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 关于数组,数组是最基本的构造类型,它是一组相同类型数据的有序组合.数组中的元素在内存中连续存放,每个元素 ...

  3. HTML一

    什么是前端: 前端,也称web前端对于网站来说,通常是指网站的前台部分,通俗点就是用户可以看到的部分, 浏览器.APP.应用程序的界面展现和用户交互就是前端 前端要学习那些技术:html+css+ja ...

  4. Day 1 上午

    唉,上午就碰到一个开不了机的电脑,白白浪费了半个小时,真的难受QwQ POINT1 枚举 枚举也称作穷举,指的是从问题所有可能的解的集合中一一枚举各元素. 用题目中给定的检验条件判定哪些是无用的,哪些 ...

  5. Git-01-上传项目到github

    function fun1(){ Git上传项目到github Folder-->Git bash here Execute command: --git clone 仓库地址     多出一个 ...

  6. js 调用打印机方法

    <button onclick="localdy({php echo $item['order']['id'];})" class="btn btn-xs orde ...

  7. [BJOI2019]勘破神机(斯特林数,数论)

    [BJOI2019]勘破神机(斯特林数,数论) 题面 洛谷 题解 先考虑\(m=2\)的情况. 显然方案数就是\(f_i=f_{i-1}+f_{i-2}\),即斐波那契数,虽然这里求出来是斐波那契的第 ...

  8. echart在X轴下方添加字

    使用Echart做统计图表,这个方便快捷还高大上 官方网址 https://www.echartsjs.com/ 按照文档,很快就做出了一个柱图表 在X轴下方,要显示出对应日期是星期几(上图最下方,用 ...

  9. Flex布局【弹性布局】学习

    先让我们看看在原来的学习中遇到的问题 之前在软件工程的大作业中,自己从零开始学习如何开发一个网站,从页面,到后台,当然数据库是大二的必修课 在学习如何编写一个静态页面的时候,完全是自学,自己摸索,所以 ...

  10. 使用BeautifulSoup

    下载bs4,导入BeautifulSoup pip install bs4 from bs4 import BeautifulSoup BeautifulSoup 的使用 创建对象 r = reque ...