python 中文人工智能_人工智能(python)开发 —— 字典(dict)-Go语言中文社区...

本章主要讲述了关于字典的相关知识,字典是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 对象

示例:

0ab97b143f857e1b100680a414061767.png

b24f9d6e01771c75016b4cae0ae2cca1.png

a9b860290b5a253817699357e1cbf438.png

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("""+---------------+----------+----------+""")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值