一.字典的定义
#字典是一个无序的数据集合,使用print输出字典时
#通常输出的顺序和定义的顺序不一致
# users = ['user1','user2']
# passwd = ['123','456']
# print(zip(users,passwd))
# print(list(zip(users,passwd)))
# print(dict(zip(users,passwd)))
# s = {}
# print(type(s))
#字典:key-value 键值对
#value值可以是任意数据类型
# s = {
# 'linux':[100,99,88],
# 'westos':[190,564,645]
# }
#
# print(s)
# print(type(s))
#工厂函数
# d = dict()
# print(d)
# print(type(d))
#
# d1 = dict(a=1,b=2)
# print(d1)
# print(type(d1))
#字典的嵌套
students = {
'03113009':{
'name':'tom',
'age':18,
'score':80
},
'03113010':{
'name': 'laoli',
'age': 19,
'score':30
}
}
print(students['03113010']['name'])
#所有的key和value值是一样的情况
print({}.fromkeys({'1','2'},'03113009'))
二.字典的特性
#字典不支持索引
# print(d['1'])
#字典不支持切片
# print(d[:])
#字典的重复和连接无意义,因为字典的key值是唯一的
#成员操作符
print('1' in d)
print('1' not in d)
#for循环,默认遍历字典的key值
for key in d:
print(key)
#遍历字典
for key in d:
print(key,d[key])
for key,value in d.items():
print(key,value)
三.字典的增加
#增加一个元素
#如果key值存在,则更新对应的value值
#如果key值不存在,则添加对应的key-value值
service['mysql'] = 3306
print(service)
service['http'] = 443
print(service)
#添加多个key-value值
service_backup = {
'https':443,
'tomcat':8080,
'http':8080
}
service.update(service_backup)
print(service)
service.update(flask=9000,http=8000)
print(service)
#setdefault添加key值
#如果key值存在,不做修改
#如果key值不存在,则添加对应的key-value
service.setdefault('http',9090)
print(service)
service.setdefault('oracle',44575)
print(service)
四.字典的删除
service = {
'http':80,
'ftp':21,
'ssh':22
}
# del service['http']
# print(service)
#pop删除指定key的key-value
#如果key存在,删除,并且返回删除key对应的value
#如果key不存在,报错
# item = service.pop('http')
# print(item)
# print(service)
#popitem删除最后一个key-value值
item = service.popitem()
print('删除的key-value对是:',item)
print(service)
#清空字典内容
service.clear()
print(service)
五.字典的查看
service = {
'http':80,
'ftp':21,
'ssh':22
}
#查看字典的key值
print(service.keys())
#查看字典的value值
print(service.values())
#查看key的value值;key不存在,报错
# print(service['https'])
#查看key的value值
#key不存在,默认返回None
#key不存在,有default,则返回default
print(service.get('https',443))
print(service.get('https'))
#遍历
# for k,v in service.items():
# print(k,'--->',v)
# print(service['https'])
if 'https' in service:
print(service['https'])
else:
print('key not exist')
#get方法获取指定key对应的value值
#如果key值存在,返回对应的value值
#如果key值不存在,默认返回None,如果需要指定返回值,传值即可
print(service.get('https','ket not exist'))
六.字典练习
#练习1
方法1
"""
# _*_coding:utf-8_*_
Name:04_字典.py
Date:1/16/19
Author:westos-dz
"""
"""
数字重复统计:
1)随机生成1000个整数
2)数字范围[20,100]:
3)升序输出所有不同的数字及其每个数字重复的次数
"""
import random #定义一个随机数
table = [] #定义一个空的列表table
for i in range(1000):
a = random.randint(20,100) #table用于存储含有重复数据的乱序列表
table.append(a)
table1=sorted(table) #table1用于存储含有重复数据的有序列表
dict = {} #定义一个空字典
for j in table1: #对每一个table1中的元素进行循环处理
num = table1.count(j) #统计每个元素的重复次数
dict.setdefault(j,num) ###将元素及对应的重复次数存储到字典中,如果key值存在,不更新
#dict[j] = num
print(dict)
方法2
import random
all_nums = []
for item in range(1000):
all_nums.append(random.randint(20,100))
#对生成的1000个数进行排序,然后加到字典中
sorted_nums = sorted(all_nums)
num_dict = {}
for num in sorted_nums:
if num in num_dict:
num_dict[num] += 1
else:
num_dict[num] = 1
print(num_dict)
#练习2
字符串的处理,字典内容的增加
"""
# _*_coding:utf-8_*_
Name:单词重复统计.py
Date:1/16/19
Author:westos-dz
"""
"""
重复的单词:此处认为单词之间以空格为分隔符,并且不包含标点符号
1.用户输入一句英文
2.打印每个单词其其重复的次数
”hello java hello python“
hello 2
java 1
python 1
"""
sentence = input('请输入句子:')
s = sentence.split(' ') #将输入的字符串以空格为分隔符转换为列表
table = [] #定义一个空列表
dict = {} #定义一个空字典
for i in s : #对列表中的每一个元素进行循环
num = sentence.count(i) #统计每一个元素的重复次数
dict.setdefault(i,num) #以单词为键,重复次数为值不重复添加到字典中
for j in dict: #遍历字典
num1=dict[j] #将元素对应的重复次数保存为变量
print('%s %s' %(j,num1)) #打印元素及重复次数
#练习3
字符串的处理
集合与列表的转换
去重
排序
字典元素的添加
"""
# _*_coding:utf-8_*_
Name:银行卡号.py
Date:1/16/19
Author:westos-dz
"""
import random
"""
# 1. 随机生成100个卡号;
# 卡号以6102009开头, 后面3位依次是 (001, 002, 003, 999>),
# 2. 生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";
# 3. 输出卡号和密码信息, 格式如下:
卡号 密码
6102009001 000000
"""
"""
# _*_coding:utf-8_*_
Name:银行卡号.py
Date:1/16/19
Author:westos-dz
"""
import random
"""
# 1. 随机生成100个卡号;
# 卡号以6102009开头, 后面3位依次是 (001, 002, 003, 999>),
# 2. 生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";
# 3. 输出卡号和密码信息, 格式如下:
卡号 密码
6102009001 000000
"""
import random
kahao_table = []
table_count = 0 ##以最终抽取的银行卡号数量,定义计数器
#随机生成100个不重复的银行卡号
while table_count < 101: ##当抽取的不重复的卡号计数器到100时,停止循环
num = random.randint(1,999) ##抽取末尾数字
kahao_table.append('6102009%.3d' %num) ##将末位数保留三位,不足三位以0补齐
kahao_table = list(set(kahao_table)) #利用集合,进行去重,并再次转换为列表
table_count = len(kahao_table) ##测量列表长度
#将银行卡号排序
sort_table = sorted(kahao_table)
#将列表作为key值,value值都为字符redhat,添加到字典中
dict = {}.fromkeys(sort_table,'redhat')
print('银行卡号 密码')
for c in dict:
print(c,dict[c])