python高阶(三)——字典学习

字典 dict 

1. 字典是一种可变的容器,可以存储任意类型的数据
2. 字典中的每个数据都是用'键'(key) 进行索引,而不像序列可以用下标来进行索引
3. 字典的数据没有先后顺序关系,字典的存储是无序的
4. 字典中的数据以键(key)-值(value)对进行映射存储
5. 字典的键不能重复,且只能用不可变类型作为字典的键

字典的字面值表示方式

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

创建空字典

d = {}

创建非空的字典

d = {'name': 'tarena', 'age': 15}
d = {'姓名': '小张'}
d = {1:'', 2:''}

 

字典的构造函数 dict

dict() 创建一个空字典,等同于 {}
dict(iterable) 用可迭代对象初始化一个字典
dict(**kwargs) 关键字传参形式生成一个字典

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

 什么叫可变类型什么叫不可变类型?

不可变类型

int,float,complex,bool,str,tuple,frozenset(固定集合), bytes(字节串)(后面会讲)

可变类型

list, dict, set(集合), bytearray(字节数组)

字典的键索引

用[] 运算符可以获取字典内'键'所对应的'值'

语法:字典[键]

#获取数据元素
d = dict(name='LeoLRH', age=15)
print(d['age']) # 15
#添加/修改字典元素
#字典[键] = 表达式
d = {}
d['name'] = 'LeoLRH' # 创建一个新的键值对
d['age'] = 15 # 创建键值对
d['age'] = 16 # 修改键值对

 

del 语句删除字典的元素

语法:del 字典[键]

d = {'name': 'china', 'pos': 'asia'}
del d['pos']
print(d)
del d['name']
print(d) # {}

 

字典的 in / not in 运算符

可以用 in 运算符来判断一个'键'是否存在于字典中,如果存在则返回True, 否则返回False
not in 与 in 返回值相反

d = {'a': 1, 'b': 2}
'a' in d # True
1 in d # False
100 not in d # True
2 not in d # True

 

字典的迭代访问

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

d = {'name': 'LeoLRH', (2002, 1, 1): '生日'}
for x in d:
    print(x)

 

可以用于字典的内建函数

len(x) 返回字典键-值对的个数
max(x) 返回字典的键的最大值
min(x) 返回字典的键的最小值
sum(x) 返回字典所有键的和
any(x) 真值测试,只对键测试,如果其中一个键为True,结果为True
all(x) 真值测试,全部键为True时,结果才为True

 

字典的方法

 

 

# 练习:
#   写程序,实现以下需求:
#     将如下数据形成一个字典seasons
#        '键'    '值'
#        1       '春季有1,2,3月'
#        2       '夏季有4,5,6月'
#        3       '秋季有7,8,9月'
#        4       '冬季有10,11,12月'
#     让用户输入一个整数代表这个季度,打印这个季度的信息,如果用户输入的信息不在字典的键内,则打印信息不存在

seasons = {1: '春季有1,2,3月',
           2: '夏季有4,5,6月',
           3: '秋季有7,8,9月',
           4: '冬季有10,11,12月'
          }

n = int(input("请输入季度(1~4): "))

# 方法1
# if n in seasons:
#     print(seasons[n])
# else:
#     print("输入有误!")

# 方法2
print(seasons.get(n, "输入有误!"))

 

# 练习:
#   写程序,输入一段字符串,打印出这个字符串中出现过的字符及出现过的次数:
#     如:
#       输入: ABCDABCABA
#     输出:
#       A : 4次
#       C : 2次
#       B : 3次
#       D : 1次
#     注: 不要求打印的顺序

s = input("输入: ")
# 方法1
# d = {}  # 字典的键是出现的字符,字典的值是出现的次数
# for ch in s:  # 把我有字符都取出一遍
#     if ch not in d:
#         # 如果是第一次出现,则把ch作为键,把1作为值加入字典中
#         d[ch] = 1
#     else:
#         # 如果已经出现过,则把ch键所对应的值做 +1 操作
#         d[ch] += 1
# 
# for k in d:
#     print(k, ":", d[k], '次')

# 方法2:
d = {}
for ch in s:
    if ch not in d:  # 把将一次出现的字符加入字典中
        d[ch] = None

for ch in d:
    print(ch, ":", s.count(ch), "")

 

字典推导式

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

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

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

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

 

# 练习:
#  1. 有字符串列表如下:
#     L = ['LeoLRH', 'xiaozhang', 'xiaowang']
#   生成如下字典:
#     d = {'LeoLRH': 6, 'xiaozhang': 9, 'xiaowang': 8}
#   注: 字典的值是键的长度

L = ['LeoLRH', 'xiaozhang', 'xiaowang']
d = {x : len(x) for x in L}
print(d)

 

# 2. 编号列表如下:
#   Nos = [1001, 1002, 1003, 1004]
#   names = ['Tom', 'Jerry', 'Spike', 'Tyke']
#   生成用Nos数据为键,以names为值的字典,如下:
#     {1001: 'Tom', 1002: 'Jerry', ......}


Nos = [1001, 1002, 1003, 1004]
names = ['Tom', 'Jerry', 'Spike', 'Tyke']

# 方法1
# d = { Nos[i]: names[i]
#      for i in range(min(len(Nos), len(names)))}

# 方法2:
d = { x: names[Nos.index(x)] for x in Nos}


print(d)

 

posted @ 2019-02-16 12:17  LeoLRH  阅读(428)  评论(0编辑  收藏  举报