字典的定义
#定义一个字典,方式一:
s = {}
print(s,type(s))
{} <class 'dict'>
#字典:key-value 键值对,方式二:
s = {
'linux':[100,99,88],
'python':[190,56,78]
}
print(s,type(s))
{'linux': [100, 99, 88], 'python': [190, 56, 78]} <class 'dict'>
#使用工厂函数创建字典,方式三:
d = dict()
print(d,type(d))
{} <class 'dict'>
d = dict(a=1,b=2)
print(d,type(d))
{'a': 1, 'b': 2} <class 'dict'>
#字典的嵌套
student = {
'123':{
'name':'tom',
'age':18,
'score':99
},
'456':{
'name':'lily',
'age':19,
'score':100
}
}
print(student['123']['name'])
tom
字典的特性
d = {
'1':'a',
'2':'b'
}
print(d['1'])
a
#字典不支持切片
#成员操作符(针对key)
print('1' in d)
print('1' not in d)
True
False
#for循环 针对key
for key in d:
print(key)
1
2
for key in d:
print(key,d[key])
1 a
2 b
字典的常用方法
字典元素的增加
service = {
'http':80,
'ftp':23,
'ssh':22
}
========dict.update()============
#如果key值存在,则更新对应的value值
#如果key值不存在,则添加对应的key-value值
service['https'] = 443
print(service)
{'http': 80, 'ftp': 23, 'ssh': 22, 'https': 443}
service['ftp'] = 21
print(service)
{'http': 80, 'ftp': 21, 'ssh': 22, 'https': 443}
#增加多个key值
service_backup = {
'tomcat':8080,
'mysql':3306
}
service.update(service_backup)
print(service)
{'http': 80, 'ftp': 21, 'ssh': 22, 'https': 443, 'tomcat': 8080, 'mysql': 3306}
service.update(flask=9000,dns=53)
print(service)
{'http': 80, 'ftp': 21, 'ssh': 22, 'https': 443, 'tomcat': 8080, 'mysql': 3306, 'flask': 9000, 'dns': 53}
==========dict.setdefault()=========
#如果key值存在:不做修改
#如果key值不存在:则添加对应的key-value
service.setdefault('http',9090)
print(service)
{'http': 80, 'ftp': 21, 'ssh': 22, 'https': 443, 'tomcat': 8080, 'mysql': 3306, 'flask': 9000, 'dns': 53}
service.setdefault('oracle',44575)
print(service)
{'http': 80, 'ftp': 21, 'ssh': 22, 'https': 443, 'tomcat': 8080, 'mysql': 3306, 'flask': 9000, 'dns': 53, 'oracle': 44575}
字典元素的删除
service = {
'http':80,
'ftp':23,
'ssh':22
}
===========del===============
del service['http']
print(service)
{'ftp': 23, 'ssh': 22}
===========dict.pop()=============
#字典不能切片,所以pop()括号中的是key
#pop删除指定key对应的value值
#如果key存在,删除,并且返回删除key对应的value(可以用变量取接收)
#如果不存在,直接报错
item = service.pop('https')
print(item)
KeyError: 'https'
print(service)
('ssh', 22)
===========dict.popitem=========
#popitem删除最后一个key-value值
item = service.popitem()
print(item)
print(service)
{'ftp': 23}
===========dict.clear()==========
#清空字典内容
service.clear()
print(service)
{}
字典元素的查看
service = {
'http':80,
'ftp':23,
'ssh':22
}
#查看字典的key值
print(service.keys())
dict_keys(['http', 'ftp', 'ssh'])
#查看字典的value值
print(service.values())
dict_values([80, 23, 22])
#查看字典的key-value值
print(service.items())
dict_items([('http', 80), ('ftp', 23), ('ssh', 22)])
字典的访问
通常,如果访问字典中没有的项将会引发错误, 但是用 get 方法,在访问不存在的键时,没有引发异常,而是返回None,还可以指定默认值。
#key不存在,默认返回None,也可自己设置,如下的443也可修改为其它
#key存在,返回defalut的值
===========dict.get()==============
print(service.get('https','443'))
443
字典的排序
sorted() #用此函数可以实现字典的排序,且不仅限制于字典
li = {15, 3, 8, 7, 135}
print(sorted(li))
[3, 7, 8, 15, 135]
字典的操作
=============dict.fromkeys() # 设置相同的键对应的值==============
keys=[]
for i in range(10):
keys.append(i)
dict={}.fromkeys(keys)
print(dict)
{0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None}
dict1={}.fromkeys(keys,'fairy')
print(dict1)
{0: 'fairy', 1: 'fairy', 2: 'fairy', 3: 'fairy', 4: 'fairy', 5: 'fairy', 6: 'fairy', 7: 'fairy', 8: 'fairy', 9: 'fairy'}
--------------练习--------------
#数字重复统计:
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] += 1
else:
num_dict[num] = 1
print(num_dict)
-------------练习---------------
重复的单词: 此处认为单词之间以空格为分隔符, 并且不包含,和.;
# 1. 用户输入一句英文句子;
# 2. 打印出每个单词及其重复的次数;
s = input('s:')
#把每个单词分割处理,默认以空格分割
s_li = s.split()
print(s_li)
#通过字典存储单词和改单词出现的次数
word_dict = {}
for item in s_li:
if item not in word_dict:
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
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]))