1.字典的含义:
字典和列表类似,是可变序列,与列表不同的是,字典是无序的可变序列,保存的内容是以 键值对 的形式存放的。键是唯一的,而值可以是多个。值可以取任意数据了类型,但键必须是不可变的。
创建一个字典:
1 . 定义字典时,每个元素都包含两个部分“键(key)“和“值(value)“。
2 . 创建字典时,在键(key)和值(value)只见用冒号分隔,相邻两个元素用逗号分隔,所有元素用大括号括起来。
例如:
dic = {1: "ssh", 2: "ftp", "key": "value"} #冒号前的为键,冒号后的为值
print(dic)运行结果:
{1: 'ssh', 2: 'ftp', 'key': 'value'}
创建一个空字典:
s = {} 方法一
print(s)运行结果:
{}d = dict() 方法二
print(d)运行结果:
{}
字典的镶套:
student = {'123':{'name':'tom','age':18,'score':99},'456':{'name':'lily','age':19,'score':100}
}print(student['123']['name'])运行结果为:
tom
2. 字典的特征:
1 . 通过键(key)而不是通过索引来读取字典
d = {'1':'a','2':'b'
}
print(d['1'])运行结果:
a
2 . 成员操作符(针对key)
d = {'1':'a','2':'b'
}
print('1' in d)
print('1' not in d)运行结果:
True
False
3 . for循环 针对key
d = {'1':'a','2':'b'
}
for key in d:print(key)运行结果:
1
2
4 . 遍历字典,输出字典的key和对应的值
d = {'1':'a','2':'b'
}
for key in d:print(key,d[key])运行结果:
1 a
2 b
3 . 字典元素的查看、增加、删除
1 . 查看字典的值:
service = {'http':80,'ftp':23,'ssh':22
}
print(service.keys()) 查看字典的key值运行结果:
dict_keys(['http', 'ftp', 'ssh'])print(service.values()) 查看字典的value值运行结果:
dict_values([80, 23, 22])print(service.items()) 查看字典的key-value值运行结果:
dict_items([('http', 80), ('ftp', 23), ('ssh', 22)])print(service['http']) 通过key值查找value值(key值不存在时会报错)运行结果:
80print(service.get('http')) 使用get查看key的value值,若key存在,返回对应的value值运行结果:
80print(service.get('https','443')) 若key不存在,返回None 或者设定好的默认值。运行结果:
443
2 . 字典元素的增加:
service = {'http':80,'ftp':23,'ssh':22
}
service['https'] = 443
print(service) 如果key值不存在,则添加对应的key-value值运行结果:
{'http': 80, 'ftp': 23, 'ssh': 22, 'https': 443}service['ftp'] = 21
print(service) 如果key值存在,则更新对应的value值运行结果:
{'http': 80, 'ftp': 21, 'ssh': 22}service_backup = {'tomcat':8080,'mysql':3306
}
service.update(service_backup) 增加多个key值
print(service)运行结果:
{'http': 80, 'ftp': 23, 'ssh': 22, 'tomcat': 8080, 'mysql': 3306}或者可以这样写:
service.update(flask=9000,dns=53)
print(service)运行结果:
{'http': 80, 'ftp': 23, 'ssh': 22, 'flask': 9000, 'dns': 53}service.setdefault('http',9090) 如果key值存在:不做修改
print(service)运行结果:
{'http': 80, 'ftp': 23, 'ssh': 22}service.setdefault('oracle',44575) 如果key值不存在,则添加对应的key-value
print(service)运行结果:
{'http': 80, 'ftp': 23, 'ssh': 22, 'oracle': 44575}
3 . 字典元素的删除:
service = {'http':80,'ftp':23,'ssh':22
}
del service['http'] 删除key值和value值
print(service)运行结果:
{'ftp': 23, 'ssh': 22}item = service.pop('http') pop删除指定key对应的value值
print(item) 如果key存在,删除,并且返回删除key对应的value(可以用变量取接收)
print(service) 如果不存在,直接报错运行结果:
80
{'ftp': 23, 'ssh': 22}item = service.popitem() popitem删除最后一个key-value值
print(item)
print(service)运行结果:
('ssh', 22)
{'http': 80, 'ftp': 23}service.clear() 清空字典内容
print(service)运行结果:
{}
练习:
1 . 数字重复统计:
1). 随机生成1000个整数;
2). 数字的范围[20, 100],
3). 升序输出所有不同的数字及其每个数字重复的次数;
import random
all_num = []for item in range(1000):all_num.append(random.randint(20,100))# 对生成好的1000个数进行排序,然后加到子字典里
sorted_num = sorted(all_num)
num_dict ={}for num in sorted_num:if num in num_dict:num_dict[num] += 1else:num_dict[num] = 1print(num_dict)
2 . 重复的单词: 此处认为单词之间以空格为分隔符, 并且不包含,和 . ;
# 1. 用户输入一句英文句子;
# 2. 打印出每个单词及其重复的次数;
s = input('s:')
# 1.把每个单词分割处理
s_li = s.split()
print(s_li)
# 通过字典存储单词和改单词出现的次数
word_dict = {}
for item in s_li:if item not in word_dict:word_dict[item] = 1else:word_dict[item] += 1
print(word_dict)
3 . 随机生成100个卡号;
1 .卡号以6102009开头, 后面3位依次是 (001, 002, 003, 100),
2. 生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";
3. 输出卡号和密码信息, 格式如下:
卡号 密码 6102009001 000000
代码如下:
card_ids =[]
# 生成100个卡号
for i in range(100):# %.3d:代表整型数占3位s = '6102009%.3d' %(i+1)# 将每次生成的卡号都加入到列表中card_ids.append(s)card_ids_dict = {}.fromkeys(card_ids,'redhat')
# print(card_ids_dict)
print('卡号\t\t\t\t\t密码')
for key in card_ids_dict:print('%s\t\t\t%s' %(key,card_ids_dict[key]))
4 . 判断101-200之间有多少个素数,并输出所有素数
hah_li = []
for i in range(101,200):for k in range(2,i):if i%k == 0:breakelse:hah_li.append(i)
print(hah_li)