字典的定义
“”"
字典是一个无序的数据集合
通常输出顺序和定义顺序不一样
字典有key值和value值{‘key’:‘value’}
“”"
users = ['user1','user2']
passwds = ['123','456']
print(list(zip(users,passwds)))
print(dict(zip(users,passwds)))
字典 key-value 键值对
注意:字典中的value可以是任意数据类型。
s = {
'linux':[100,99,80],
'python':[89,90,100]
}
print(s,type(s))
###定义一个空字典###
s = {}
print(s,type(s))
工厂函数
d = dict() ##定义一个空字典
print(d,type(d))
d = dict(a=1,b=2)
print(d,type(d))
字典的嵌套
student = {
123:{
"name":'tom',
'age':18,
'score':99
}, ##注意有逗号
456:{
'name':'lily',
'age':19,
'score':98
}
}
print(student[123]['score']) ##输出对应的value值
##所有key的value值一样##
print({}.fromkeys({'1','2'},'xiaozhan'))
字典的特性
d = {
'1':'a',
'2':'b'
}
print(d['1'])
字典不支持(索引)切片
print(d[0])
成员操作符
print('1' in d)
print('1' not in d)
for循环 针对key
for key in d:
print(key)
遍历字典,循环key值和索引
for key in d:
print(key,d[key])
字典元素的增加
service = {
'http':80,
'ftp':23,
'ssh':22
}
# 增加一个元素
# 如果key值存在,则更新对应的value值
# 如果key值不存在,则添加对应的值
service['https'] = 443
print(service) ##添加key-value值
service['ftp'] = 21
print(service) ##更新value值
##添加多个key-value值
service_backup ={
'tomcat':8080,
'mysql':3306
}
service.update(service_backup) ##在service中添加service_backup
print(service)
service.update(dns=53) ##也可以直接使用upadate添加一对key-value
print(service)
# 如果key值存在,不做修改
# 如果key值不存在,则添加对应的值
service.setdefault('http',9090) ##注意格式,不可以用=
print(service)
service.setdefault('oracle',44575)
print(service)
字典元素的删除
service = {
'http':80,
'ftp':23,
'ssh':22,
}
# pop删除指定key对应的value值
# item = service.pop('https')
# print(item)
# print(service)
# popitem默认删除最后一个key-value
a = service.popitem()
print(a)
print(service)
# 清空字典内容
service.clear()
print(service)
字典元素的查看
service = {
'http':80,
'ftp':23,
'ssh':22,
}
# 查看字典中所有的key值
print(service.keys())
# 查看字典中所有的value值
print(service.values())
# 查看字典中的key-value
print(service.items())
“”"
查看指定key的value值
key不存在,默认返回None
key不存在,有default,则返回default
get方法获取指定key对应的value值
如果key存在,返回对应的value值
如果不存在,默认返回None,如果需要指定返回值,传值即可。
print(service.get('https',443)) ##如果https不存在,则返回443
print(service['https']) ##报错
字典练习01
“”"
数字重复统计:
1). 随机生成1000个整数;
2). 数字的范围[20, 100],
3). 升序输出所有不同的数字及其每个数字重复的次数;
“”"
import random
all_num = []
for item in range(1000):
all_num.append(random.randint(20,100)) ##生成1000个数
# 对生成好的1000个数进行排序,然后添加到字典中
sorted_num = sorted(all_num)
num_dict ={} ##定义空字典
for num in sorted_num: ##遍历排序好的列表
if num in num_dict: ##如果key值存在,则对应的value自加1
num_dict[num] += 1
else: ##如果key值不存在,则添加对应的key-value值,且value为1
num_dict[num] = 1
print(num_dict) ##输出字典
字典练习02
“”"
重复的单词: 此处认为单词之间以空格为分隔符, 并且不包含,和.;
# 1. 用户输入一句英文句子;
# 2. 打印出每个单词及其重复的次数;
“”"
s = input(‘s:’)
# 1.把每个单词分割处理
s_li = s.split() ##以空格为分隔符进行分割
"""
s = input('s:') ##输入一个句子
s_li = s.split()
print(s_li)
结果:
s:hello hong hong
['hello', 'hong', 'hong']
"""
word_dict ={}
for item in s_li: ##循环遍历
if item not in word_dict: ##如果不在字典中,添加新的key-value值
word_dict[item] = 1
else:
word_dict[item] += 1
print(word_dict)
练习
“”"
# 1. 随机生成100个卡号;
# 卡号以6102009开头, 后面3位依次是 (001, 002, 003, 100),
# 2. 生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";
# 3. 输出卡号和密码信息, 格式如下:
卡号 密码
6102009001 000000
“”"
# print({}.fromkeys({'1','2'},'100000')) ##多个key的value值相同。
card_ids = []
# 身成100个卡号
for i in range(100):
# %.3d:代表整数占位
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: ##更改格式,默认循环key值
print('%s\t\t\t%s' %(key,card_ids_dict[key]))
作业
"""
1.题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字
2.题目:判断101-200之间有多少个素数,并输出所有素数
3.题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万到60万之间时高于40万元的部分,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%;
高于100万元时,超过100万元的部分按1%提成;
从键盘输入当月利润I,求应发放奖金总数?
4. 累加和类型程序:
1). 求f=1+2+...+9【很简单的问题】
2). 求f=1-2+3-4+...+9【在(一)的基础上,学习如何一正一负地累加】
3). 求f=1-1/2+1/3-1/4+...+1/9【在(二)的基础上,被加数成了自然数的倒数】
4). 求f=1!-2!+3!-4!+...+9!【在(二)的基础上,被加数成了自然数的阶乘】
"""