Python之字典的特性及常用方法

字典的定义

#定义一个字典,方式一:

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]))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值