字典的定义
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中。
注意:值value可以取任何数据类型,但键key必须是不可变的,如字符串,数字或元组。
字典也是一个无序的数据集合,通常输出的顺序和定义的顺序不一致。
- 定义空字典(两种方法)
d = {}
print(d)
print(type(d))
d1 = dict()
print(d1)
print(type(d1))
- 定义字典(两种方法)
d1 = {
'westos': [190, 521, 231],
'mysql': [100, 99, 88]
}
print(d1)
d2 = dict(westos=[190, 521, 231], mysql=[100, 99, 88])
print(d2)
- 当字典中key的value相同时,可以使用字典的fromkeys批量创建。
注意:fromkeys第一个参数是一个可迭代的对象,第二个参数类型随意
d = dict()
d = d.fromkeys(['http','https'],[8080,443,80])
print(d)
print({}.fromkeys({'A','B'},100))
- 字典的嵌套
student = {
2013118118: {
'name': 'mac',
'age': 18,
'score': {
"Chinese": 88.5,
"Math": 98.5
}
},
201731955: {
'name': 'mac',
'age': 24,
}
}
print(student[201731955])
print(student[2013118118]['score']['Math'])
字典的特性
- 通过key打印value
dic = {
1: 'http',
'b': 'nginx'
}
print(dic[1],dic['b'])
- 成员操作符
dic = {
1: 'http',
'b': 'nginx'
}
print(1 in dic)
print('b' not in dic)
- for循环遍历字典
dic = {
1: 'http',
'b': 'nginx'
}
# 只打印key
for k in dic:
print(k)
# 只打印value
for k in dic:
print(dic[k])
for k,v in dic.items():
print(v)
# 打印key,value
for k in dic:
print(k,dic[k])
for k,v in dic.items():
print(k,v)
字典的方法
字典的增加
- 单个键值对,直接增加
service['https']=443
service = {
'http':80,
'mysql':3306,
'smtp':25
}
service['https']=443
print(service)
- 添加多个key-value值,字典的update方法
service = {
'http':80,
'mysql':3306,
'smtp':25
}
service_backup = {
'https':443,
'ssh':22
}
service.update(service_backup)
print(service)
service.update(flask=9000,tomcat=8080)
print(service)
- setdefault添加key值,如果key值存在,不做修改;如果key值不存在,添加对应的key-value
service = {
'http': 80,
'mysql': 3306,
'smtp': 25
}
service.setdefault('http',8000)
service.setdefault('oracle',44575)
print(service)
字典的删除
- 使用del删除
del dict[key]
service = {
'http': 80,
'mysql': 3306,
'smtp': 25
}
del service['http']
print(service)
- pop()删除指定的key的key-value
如果key存在,删除,并返回删除key对应value
如果key不存在,报错
service = {
'http': 80,
'mysql': 3306,
'smtp': 25
}
item = service.pop('http')
print(item)
print(service)
- popitem()删除字典中最后一个key-value对,以元组形式返回
service = {
'http': 80,
'mysql': 3306,
'smtp': 25
}
item = service.popitem()
print(item)
print(service)
- clear清除字典内容
service = {
'http': 80,
'mysql': 3306,
'smtp': 25
}
service.clear()
print(service)
字典的查看
- 查看字典的key值
services = {
'http':80,
'mysql':3306,
'smtp':25
}
print(services.keys())
- 查看字典的value值
services = {
'http':80,
'mysql':3306,
'smtp':25
}
print(services.values())
- 查看字典的k-v值
services = {
'http':80,
'mysql':3306,
'smtp':25
}
print(services.items())
- 查看key的value值
key不存在,默认返回None
key不存在,有default,则返回default值
services = {
'http':80,
'mysql':3306,
'smtp':25
}
print(services.get('http'))
print(services.get(1))
字典的应用练习
- 数字重复统计
"""
# 数字重复统计:
1). 随机生成1000个整数;
2). 数字的范围[20, 100],
3). 升序输出所有不同的数字及其每个数字重复的次数;
"""
方法1:
import random
li = []
numDic = {}
for i in range(1000):
li.append(random.randint(20, 100))
li.sort()
numSet = set(li)
for i in numSet:
numDic[i] = li.count(i)
print(numDic)
for k in numDic:
print('%d 出现了 %d 次' %(k,numDic[k]))
方法2:
import random
all_num = []
for item in range(1000):
all_num.append(random.randint(20, 100))
print(all_num)
sorted_nums = sorted(all_num)
num_dict = {}
for num in sorted_nums:
if num in num_dict:
num_dict[num] += 1
else:
num_dict[num] = 1
print(num_dict)
- 统计重复单词次数
"""
输入:'westos hello python westos'
输出:
westos 2
hello 1
python 1
"""
while True:
str = input("请输入一段话:")
strLi = str.split()
wordDic = {}
for i in strLi:
if i in wordDic:
wordDic[i] += 1
else:
wordDic[i] = 1
print(wordDic)
for k,v in wordDic.items():
print(k,':',v)