天天看点

人工智能(python)开发 —— 字典(dict)

       本章主要讲述了关于字典的相关知识,字典是python开发的一个重要的数据存储容器,重点理解字典的存储方式并能够灵活的运用到实际的问题中来。

一、字典的概念

1、字典的定义

        1. 字典是一种可变的容器,可以存储任意类型的数据

        2. 字典中的每个数据都是用"键"(key) 进行索引,而不象序列可以用下标来进行索引

        3. 字典中的数据没有先后顺序关系,字典的存储是无序的

        4. 字典中的数据以键(key)-值(value)对形式进行映射存储

        5. 字典的键不能重复,且只能用不可变类型作为字典的键

2、字典的字面值表示方式

        {} 括起来,以冒号(:) 分隔键-值对,各键-值对用逗号分隔开

3、创建空字典

        d = {}        # 空字典

        d = dict()

4、创建非空字典

d = {'name':'tarena', 'age': 15}
d = {1:'星期一', 2:"星期二"}
# 以下写法会出现问题(因为键不能重复)
d = {'a': 1, 'b': 2, 'a': '一'}  
           

5、字典的构造(创建)函数

        1、dict()                    #  创建空字典,等同于 {}

        2、dict(iterable)       # 用可迭代对象初始化一个字典

        3、dict(**kwargs)     # 关键字传参形式生成一个字典

示例:
d = dict()
d = dict([('name', 'tarena'), ('age', 15)])
d = dict(name='tarena', age=15)
           

6、字典的键、值的取值

字典的值(value)可以是任意类型

        字典的值可以是布尔值,数据,字符串,None,列表,元组,字典,以及后面要学到的集合,函数,类对象等所有类型

字典的 键(key)必须为不可变类型的值

        不可变的类型:

                bool,int,float,complex,str,tuple,frozenset(固定集合)

                包括:None

        不能充当键的类型有:

                列表,字典,集合set

示例:
{“a”: ”a”}
{100: ”100”}
{True: ”True”}
{None: ”abc”}
{(1970,1,1): ”computer year”}
           

二、字典的基本操作

1、字典的键索引

        用[] 运算符可以获取和修改键所对应的值

        语法:

                字典[键]

        示例:

d = {'name': 'tarena', 'age': 15}
print('姓名:', d['name'], '年龄:', d['age'])
           

2、添加/修改字典的元素

       字典[键] = 值

d = {}
d[‘name’] = "xiaoming"    # 创建新的键值对
d[‘age’] = 15             # 创建新的键值对
d[‘age’] = 16             # 修改age键所对应的值
           

键索引赋值说明:

        当键不存在时,创建键并绑定键对应的值

        当键存在时,修改键绑定的对象

3、删除字典的元素

        del 语句 可以用来删除字典的键

        语法:

                del 字典[键]

        示例:

                d = {1:"星期一", 2:'星期二'}

                del d[2]

4、in 运算符(成员资格判断运算符)

        1. 可以用in运算符来判断一个键是否存在于字典中,如果存在则返回True,否则返回False

        2. not in 与 in 相反

示例:
d = {1: "One", 2: "Two", "三": 'Three'}
1 in d      # True
'二' in d   # False
3 not in d  # True
'One' in d  # False
  
           

5、字典的迭代访问(迭代出来的都是键)

        字典是可迭代对象,字典只能对键进行迭代访问

示例:
    d = {1: "One", 2: "Two", "三": 'Three'}
    for k in d:
        print(k, '对应的值是:', d[k])
           

三、字典的方法

函数 说明
D代表字典对象
D.clear() 清空字典
D.pop(key) 移除键,同时返回此键所对应的值
D.copy() 返回字典D的副本,只复制一层(浅拷贝)
D.update(D2) 将字典 D2 合并到D中,如果键相同,则此键的值取D2的值作为新值
D.get(key, default) 返回键key所对应的值,如果没有此键,则返回default
D.keys() 返回可迭代的 dict_keys 集合对象
D.values() 返回可迭代的 dict_values 值对象
D.items() 返回可迭代的 dict_items 对象

示例:

人工智能(python)开发 —— 字典(dict)
人工智能(python)开发 —— 字典(dict)
人工智能(python)开发 —— 字典(dict)

D.get(100,”没有此键值对”)     # 如果没有100这个key,返回”没有此键值对”

四、字典推导式

        字典推导式是用可迭代的对象依次生成字典的表达式

        语法:

                { 键表达式: 值表达式 for 变量 in 可迭代对象 [if 真值表达式]}

                注: [] 及其中的内容代表可省略

        说明:

                1. 先从可迭代对象中取值

                2. 用变量绑定

                3. 用if 进行条件判断,如果为真值则执行下一步

                4. 执行'键表达式'和 '值表达式' 然后加入到新字典中

        示例:

            生成一个字典,键为1~9的整数,值为键的平方

d = {x: x **2 for x in range(1, 10)}
           

五、字典与列表的比较

1、字典和列表

        1. 都是可变对象

        2. 索引方式不同,列表用整数索引,字典用键索引

        3. 字典的查找速度可能会快于列表(重要)

        4. 列表的存储是有序的,字典的存储是无序的

2、列表 和字典 的内部存储原理

        列表,顺序存储

        字典,映射存储

六、练习集

1、第一题

        No = [1001, 1002, 1005, 1008],names = ['Tom', 'Jerry', 'Spike', 'Tyke'],用上面No列表中的数据作为键,用names中的数据作为值,生成相应的字典:

        如:d = {1001: 'Tom', 1002: 'Jerry', ....}

# 方法1:
    d = {No[i]: names[i] for i in range(len(No))}
  # 方法2:
    d = {n: names[No.index(n)] for n in No}
           

2、第二题

        输入一些单词和解释,将单词作为键,将解释作为值,将这些数据输入到字典中,当输入空的单词时结束输入;然后,输入查询的单词,给出单词对应的解释。

print("词典录入...")
dictionaries = []
while True:
    word = input("请输入单词:")
    if not word:
        print("词典录入完毕!!")
        break
    translate = input("请输入" + word + "的解释:")
    dictionaries = {word: translate}

print("单词查询...")
while True:
    word = input("请输入查询的单词:")
    if not word:
        break
    print(dictionaries.get(word))   # 查询不到 则返回None
           

3、第三题

输入任意个学生的信息:

学生信息有:

        姓名(字符串str)

        年龄(整数int)

        成绩(整数int)

当输入学生姓名为空时结束输入

    1) 将每个学生的信息形成字典,存于列表L 中:

      如:

      [{'name':'xiaozhang', 'age':20, 'score':97},

       {'name':'xiaoli', 'age':18, 'score':95},

       ....

      ]

    2) 以表格的形式打印所有学生的信息,如下:

       +---------------+----------+----------+

       |      name         |    age       |  score     |

       +---------------+----------+----------+

       |   xiaozhang     |    20        |    97        |

       |    xiaoli            |    18        |    95        |

       |    ......                |   ...          |   ...           |

       +---------------+----------+----------+

students_info = []
while True:
    n = input("请输入姓名:")
    if not n:
        break
    a = int(input("请输入年龄:"))
    s = int(input("请输入成绩:"))
    students_info.append({"name": n, "age": a, "score": s})

print("""+---------------+----------+----------+
|      name     |    age   |  score   |
+---------------+----------+----------+""")
for x in students_info:
    print("+",
          (x.get("name")).center(15),
          "|",
          str(x.get("age")).center(10),
          "|",
          str(x["score"]).center(10),
          "|",
          sep='')
print("""+---------------+----------+----------+""")
           

继续阅读