菜鸟教程 -- 学的不仅是技术,更是梦想!

Python 3 教程
Python3 教程 Python3 简介 Python3 环境搭建 Python3 VScode Python3 基础语法 Python3 基本数据类型 Python3 数据类型转换 Python3 解释器 Python3 注释 Python3 运算符 Python3 数字(Number) Python3 字符串 Python3 列表 Python3 元组 Python3 字典 Python3 集合 Python3 条件控制 Python3 循环语句 Python3 编程第一步 Python3 推导式 Python3 迭代器与生成器 Python3 with Python3 函数 Python3 lambda Python3 装饰器 Python3 数据结构 Python3 模块 Python __name__ Python3 输入和输出 Python3 File Python3 OS Python3 错误和异常 Python3 面向对象 Python3 命名空间/作用域 Python 虚拟环境的创建 Python 类型注解 Python3 标准库概览 Python3 实例 Python 测验

Python3 高级教程

Python3 正则表达式 Python3 CGI编程 Python3 MySQL(mysql-connector) Python3 MySQL(PyMySQL) Python3 网络编程 Python3 SMTP发送邮件 Python3 多线程 Python3 XML 解析 Python3 JSON Python3 日期和时间 Python3 内置函数 Python3 MongoDB Python3 urllib Python uWSGI 安装配置 Python3 pip Python3 operator Python math Python requests Python random Python OpenAI Python 有用的资源 Python AI 绘画 Python statistics Python hashlib Python 量化 Python pyecharts Python selenium 库 Python 爬虫 Python Scrapy 库 Python Markdown Python sys 模块 Python Pickle 模块 Python subprocess 模块 Python queue 模块 Python StringIO 模块 Python logging 模块 Python datetime 模块 Python re 模块 Python csv 模块 Python threading 模块 Python asyncio 模块 Python PyQt Python for 循环 Python while 循环
(追記) (追記ここまで)

Python3 字典

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示:

d = {key1 : value1, key2 : value2, key3 : value3 }

注意:dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict

键必须是唯一的,但值则不必。

值可以取任何数据类型,但键必须是不可变的,如字符串,数字。

一个简单的字典实例:

tinydict = {'name': 'runoob', 'likes': 123, 'url': 'www.runoob.com'}

也可如此创建字典:

tinydict1 = { 'abc': 456 }
tinydict2 = { 'abc': 123, 98.6: 37 }

创建空字典

使用大括号 { } 创建空字典:

实例

# 使用大括号 {} 来创建空字典
emptyDict = {}

# 打印字典
print(emptyDict)

# 查看字典的数量
print("Length:", len(emptyDict))

# 查看类型
print(type(emptyDict))

以上实例输出结果:

{}
Length: 0
<class 'dict'>

使用内建函数 dict() 创建字典:

实例

emptyDict = dict()

# 打印字典
print(emptyDict)

# 查看字典的数量
print("Length:",len(emptyDict))

# 查看类型
print(type(emptyDict))

以上实例输出结果:

{}
Length: 0
<class 'dict'>

访问字典里的值

把相应的键放入到方括号中,如下实例:

实例

#!/usr/bin/python3tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} print("tinydict['Name']: ", tinydict['Name'])print("tinydict['Age']: ", tinydict['Age'])

以上实例输出结果:

tinydict['Name']: Runoob
tinydict['Age']: 7

如果用字典里没有的键访问数据,会输出错误如下:

实例

#!/usr/bin/python3tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} print("tinydict['Alice']: ", tinydict['Alice'])

以上实例输出结果:

Traceback (most recent call last):
 File "test.py", line 5, in <module>
 print ("tinydict['Alice']: ", tinydict['Alice'])
KeyError: 'Alice'


修改字典

向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:

实例

#!/usr/bin/python3tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} tinydict['Age'] = 8# 更新 Agetinydict['School'] = "菜鸟教程"# 添加信息print("tinydict['Age']: ", tinydict['Age'])print("tinydict['School']: ", tinydict['School'])
以上实例输出结果:
tinydict['Age']: 8
tinydict['School']: 菜鸟教程


删除字典元素

能删单一的元素也能清空字典,清空只需一项操作。

显式删除一个字典用del命令,如下实例:

实例

#!/usr/bin/python3tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} deltinydict['Name']# 删除键 'Name'tinydict.clear()# 清空字典deltinydict# 删除字典print("tinydict['Age']: ", tinydict['Age'])print("tinydict['School']: ", tinydict['School'])

但这会引发一个异常,因为用执行 del 操作后字典不再存在:

Traceback (most recent call last):
 File "/runoob-test/test.py", line 9, in <module>
 print ("tinydict['Age']: ", tinydict['Age'])
NameError: name 'tinydict' is not defined

注:del() 方法后面也会讨论。


字典键的特性

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

两个重要的点需要记住:

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

实例

#!/usr/bin/python3tinydict = {'Name': 'Runoob', 'Age': 7, 'Name': '小菜鸟'} print("tinydict['Name']: ", tinydict['Name'])

以上实例输出结果:

tinydict['Name']: 小菜鸟

2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行,如下实例:

实例

#!/usr/bin/python3tinydict = {['Name']: 'Runoob', 'Age': 7} print("tinydict['Name']: ", tinydict['Name'])

以上实例输出结果:

Traceback (most recent call last):
 File "test.py", line 3, in <module>
 tinydict = {['Name']: 'Runoob', 'Age': 7}
TypeError: unhashable type: 'list'


字典内置函数&方法

Python字典包含了以下内置函数:

序号函数及描述实例
1len(dict)
计算字典元素个数,即键的总数。
>>> tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>> len(tinydict)
3
2str(dict)
输出字典,可以打印的字符串表示。
>>> tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>> str(tinydict)
"{'Name': 'Runoob', 'Class': 'First', 'Age': 7}"
3type(variable)
返回输入的变量类型,如果变量是字典就返回字典类型。
>>> tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>> type(tinydict)
<class 'dict'>

Python字典包含了以下内置方法:

序号函数及描述
1dict.clear()
删除字典内所有元素
2dict.copy()
返回一个字典的浅复制
3dict.fromkeys()
创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
4dict.get(key, default=None)
返回指定键的值,如果键不在字典中返回 default 设置的默认值
5key in dict
如果键在字典dict里返回true,否则返回false
6dict.items()
以列表返回一个视图对象
7dict.keys()
返回一个视图对象
8dict.setdefault(key, default=None)
和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9dict.update(dict2)
把字典dict2的键/值对更新到dict里
10dict.values()
返回一个视图对象
11dict.pop(key[,default])
删除字典 key(键)所对应的值,返回被删除的值。
12 dict.popitem()
返回并删除字典中的最后一对键和值。

x = True
country_counter = {}
def addone(country):
 if country in country_counter:
 country_counter[country] += 1
 else:
 country_counter[country] = 1
addone('China')
addone('Japan')
addone('china')
print(len(country_counter))
confusion = {}
confusion[1] = 1
confusion['1'] = 2
confusion[1] += 1
sum = 0
for k in confusion:
 sum += confusion[k]
print(sum)
AI 思考中...

13 篇笔记 写笔记

  1. #0

    hellowqp

    wqp***[email protected]

    112

    字典的键值是"只读"的,所以不能对键和值分别进行初始化,即以下定义是错的:

    >>> dic = {}
    >>> dic.keys = (1,2,3,4,5,6)
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    AttributeError: 'dict' object attribute 'keys' is read-only
    >>> dic.values = ("a","b","c","d","e","f")
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    AttributeError: 'dict' object attribute 'values' is read-only
    >>> 
    

    hellowqp

    wqp***[email protected]

    9年前 (2017年07月10日)
  2. #0

    hackmeng

    715***[email protected]

    397

    字典是支持无限极嵌套的,如下面代码:

    cities={
     '北京':{
     '朝阳':['国贸','CBD','天阶','我爱我家','链接地产'],
     '海淀':['圆明园','苏州街','中关村','北京大学'],
     '昌平':['沙河','南口','小汤山',],
     '怀柔':['桃花','梅花','大山'],
     '密云':['密云A','密云B','密云C']
     },
     '河北':{
     '石家庄':['石家庄A','石家庄B','石家庄C','石家庄D','石家庄E'],
     '张家口':['张家口A','张家口B','张家口C'],
     '承德':['承德A','承德B','承德C','承德D']
     }
    }

    可以使用如下方法进行列出

    for i in cities['北京']:
     print(i)

    将列出如下结果:

    朝阳
    海淀
    昌平
    怀柔
    密云
    for i in cities['北京']['海淀']:
     print(i)

    输出如下结果:

    圆明园
    苏州街
    中关村
    北京大学

    hackmeng

    715***[email protected]

    9年前 (2017年09月13日)
  3. #0

    匿名

    123***[email protected]

    164

    用字典记录学生名字和分数,再分级:

    #!/usr/bin/python3
    students= {}
    write = 1
    while write :
     name = str(input('输入名字:'))
     grade = int(input('输入分数:'))
     students[str(name)] = grade
     write= int(input('继续输入?\n 1/继续 0/退出'))
    print('name rate'.center(20,'-'))
    for key,value in students.items():
     if value >= 90:
     print('%s %s A'.center(20,'-')%(key,value))
     elif 89 > value >= 60 :
     print('%s %s B'.center(20,'-')%(key,value))
     else:
     print('%s %s C'.center(20,'-')%(key,value))

    测试输出结果:

    输入名字:a
    输入分数:98
    继续输入?
     1/继续 0/退出1
    输入名字:b
    输入分数:23
    继续输入?
     1/继续 0/退出0
    -----name rate-----
    ------a 98 A------
    ------b 23 C------

    匿名

    123***[email protected]

    8年前 (2018年06月13日)
  4. #0

    刀疤007

    809***[email protected]

    174

    字典可以通过以下方法调换 key和 value,当然要注意原始 value 的类型,必须是不可变类型:

    dic = {
     'a': 1,
     'b': 2,
     'c': 3,
    }
    reverse = {v: k for k, v in dic.items()}
    print(dic)
    print(reverse)

    输出如下:

    {'a': 1, 'b': 2, 'c': 3}
    {1: 'a', 2: 'b', 3: 'c'}

    刀疤007

    809***[email protected]

    8年前 (2018年06月20日)
  5. #0

    小白学python

    179***[email protected]

    71
    循环显示字典 key 与 value 值:
    b= {'a':'runoob','b':'google'}
    for i in b.values():
     print(i)
    for c in b.keys():
     print(c)
    

    执行输出结果为:

    runoob
    google
    a
    b
    

    小白学python

    179***[email protected]

    8年前 (2018年07月02日)
  6. #0

    我要搞学习

    li_***[email protected]

    70

    字典字段的比较

    获取字典中最大的值及其键:

    prices = {
     'A':123,
     'B':450.1,
     'C':12,
     'E':444,
    }
    max_prices = max(zip(prices.values(), prices.keys()))
    print(max_prices) # (450.1, 'B')
    我要搞学习

    我要搞学习

    li_***[email protected]

    8年前 (2018年07月18日)
  7. #0
    76

    Python3.x 中会碰到这样的问题:

    >>> sites_link = {'runoog':'runoob.com', 'google':'google.com'}
    >>> sides = sites_link.keys()
    >>> print(sides[0])
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    TypeError: 'dict_keys' object does not support indexing
    >>> 

    原因说明及解决方法:

    dict.values()
    dict.keys()

    在 python2.x dict.keys 返回一个列表,但是在在 Python 3.x 下,dict.keys 返回的是 dict_keys 对象,若需要转换为列表,请使用:

    list(dict.values())
    list(dict.keys())

    修改上面实例:

    >>> sites_link = {'runoog':'runoob.com', 'google':'google.com'}
    >>> sides = sites_link.keys()
    >>> list(sides)
    ['runoog', 'google']
    >>>
    david wang 8年前 (2018年07月24日)
  8. #0

    hichcock

    hic***[email protected]

    115

    通过 values 取到 key 的方法:

    >>> dic={"a":1,"b":2,"c":3}
    >>> list(dic.keys())[list(dic.values()).index(1)]
    'a'

    hichcock

    hic***[email protected]

    8年前 (2018年09月08日)
  9. #0

    nicergj

    nic***[email protected]

    49

    字典列表,即在列表中嵌套字典:

    dict_0 = {'color': 'green', 'points': 5} 
    dict_1 = {'color': 'yellow', 'points': 10} 
    dict_2 = {'color': 'red', 'points': 15}
    lists = [dict_0, dict_1, dict_2]
    for dict in lists: 
     print(dict)

    输出:

    {'color': 'green', 'points': 5} 
    {'color': 'yellow', 'points': 10} 
    {'color': 'red', 'points': 15}

    nicergj

    nic***[email protected]

    8年前 (2018年10月21日)
  10. #0

    blning

    165***[email protected]

    76

    字典推导式:

    格式:

    {key:value for variable in iterable [if expression]}

    执行步骤:

    • 1、for 循环:遍历可迭代对象,将其值赋给变量。
    • 2、if 语句:筛选满足 if 条件的结果。
    • 3、存储结构:以键值对的方式存储在字典中。

    blning

    165***[email protected]

    7年前 (2019年11月20日)
  11. #0

    蓝胖好肥

    wuw***[email protected]

    60

    dict.fromkeys() 存在一个坑:

    例如:

    l = [1,2,3]
    d = {}.fromkeys(l , [])

    这样得到的 d 是:

    {1:[] , 2:[] , 3:[]}

    其实这三个列表的地址是一样的,修改任意一个列表的值会导致所有列表的值都发生改变。

    可以使用这种方法来解决:

    d = {key : [] for key in l}

    蓝胖好肥

    wuw***[email protected]

    6年前 (2020年08月08日)
  12. #0

    nn讷豆tt

    kuz***63.com

    19

    楼上下面的方法仍然有同样的问题,即修改任意一个列表的值会导致所有列表的值都发生改变。

    d = {key : [] for key in l}

    用下面的办法可以解决嵌套字典的如上问题:

    l = [1,2,3]
    j = ['a', 'b', 'c']
    k = ['x', 'y', 'z']
    d = {key : [] for key in l}
    d = {key : d.copy() for key in j}
    d = {key : d.copy() for key in k}

    nn讷豆tt

    kuz***63.com

    4年前 (2022年07月08日)
  13. #0

    悠竹

    692***[email protected]

    23

    字典实现分支需求:

    def status(code):
     status = {
     400:"print('Bad request')",
     404:"print('Not found')"
     }
     return eval(status [code])
    status(400)

    输出:

    Bad request

    悠竹

    692***[email protected]

    4年前 (2022年12月01日)

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /