python中的字典

1.字典的定义
#字典是一个无序的数据集合,使用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,type(s))

在这里插入图片描述
#工厂函数
d = dict()
print(type(d))

d1 = dict(a=1,b=2)
print(d1,type(d1))
在这里插入图片描述
#字典的嵌套

students = {
    '03163068':{
        'name':'zyc',
        'age':21,
        'score':80
    },
    '03163065':{
        'name': 'zmm',
        'age': 21,
        'score': 75
    }
}
print(students['03163068']['name'])

在这里插入图片描述
在这里插入图片描述
#所有的key和value值是一样的

print({}.fromkeys({'1','2'},'000000'))

在这里插入图片描述
2.字典的特性
d = {
‘1’:‘a’,
‘2’:‘b’
}

#字典不支持索引
print(d[0])
在这里插入图片描述
#字典不支持切片
print(d[:])
在这里插入图片描述
#字典的重复和连接无意义

#成员操作符(只可对key值进行操作)
print(‘1’ in d)
在这里插入图片描述
#for循环,默认遍历字典的key值

for i in d:
    print(i)

#遍历字典

for i in d:
    print(i,d[i])

在这里插入图片描述
3.字典的增加
services = {
‘http’:80,
‘ftp’:21,
‘ssh’:22
}

#增加一个元素
#如果key值存在,则更新对应的value值
#如果key值不存在,则添加对应key-value

services['mysql'] = 3306
print(services)

services['http'] = 443
print(services)

在这里插入图片描述
#添加多个key-value值

services_backup = {
    'https':443,
    'tomcat':8080,
    'http':8080
}

services.update(services_backup)
print(services)

services.update(flask=9000,http=8000)
print(services)

在这里插入图片描述
#setdefault添加key值
#如果key值存在,不做修改
#如果key值不存在,添加对应的key-value

services.setdefault('http',9090)
print(services)

services.setdefault('oracle',44575)
print(services)

在这里插入图片描述
4.字典的删除

services = {
    'http':80,
    'ftp':21,
    'ssh':22
}

##永久删除key-value

del services['http']
print(services)

在这里插入图片描述
#pop删除指定key的key-value
#如果key存在,删除,并返回删除key对应的value
#如果不存在,报错

services.pop('ftp')
item = services.pop('http')
print(item)
print(services)

在这里插入图片描述
#popitem删除最后一个key-value值

item = services.popitem()
print(item)
print(services)

在这里插入图片描述
#清空字典内容

services.clear()
print(services)

在这里插入图片描述5.字典的查看
services = {
‘http’:80,
‘ftp’:21,
‘ssh’:22
}

#查看字典的key值

print(services.keys())

#查看字典的value值

print(services.values())

在这里插入图片描述
#查看字典的key-value值

print(services.items())

在这里插入图片描述
#查看key的value值
#key不存在,默认返回none
#key不存在,有default值,则返回default值

print(services.get('http'))
print(services.get('dns'))
print(services.get('https','key not exist'))

在这里插入图片描述
#遍历

for k,v in services.items():
    print(k,'--->',v)

在这里插入图片描述

for k in services:
    print(k,'--->',services[k])

在这里插入图片描述
6.练习
(1)
“”"
重复的单词: 此处认为单词之间以空格为分隔符, 并且不包含,和.>;
# 1. 用户输入一句英文句子;
# 2. 打印出每个单词及其重复的次数;
“hello java hello python”
hello 2
java 1
python 1

“”"
步骤:
1把每个单词分割处理
2通过字典存储该单词和其出现的次数
3依次循环遍历列表
如果列表元素不在字典的key中,将元素作为key 1作为value值
如果列表元素在字典的key中,直接更新元素的value值,在原有的基础上加1

s = input('请输入一个英文句子:')
new_s = s.split()
tz = {}
for i in new_s:
    if i not in tz:
        tz[i] = 1
    else:
        tz[i] += 1
print(tz)

在这里插入图片描述
(2)
“”"
数字重复统计:
1) 随机生成1000个整数
2) 数字范围[20,100]
3) 升序输出所有不同的数字及其每个数字的重复次数
“”"

import random
lb = []
for i in range(1000):
    lb.append(random.randint(20,101))
new_lb = sorted(lb)
li = {}
for i in new_lb:
    if i not in li:
        li[i] = 1
    else:
        li[i] += 1
print(li)

在这里插入图片描述
(3)
“”"
1.随机生成100个卡号;
卡号以6102009开头, 后面3位依次是 (001, 002, 003, 100),
2生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";
3输出卡号和密码信息, 格式如下:
卡号 密码
6102009001 000000
“”"

li = []
for i in range(100):
    s = '6102009%.3d' %(i+1)
    li.append(s)
zd = {}.fromkeys(li,'redhat')
print('卡号'+'        '+'密码')
for k,v in zd.items():
    print(k,v)

在这里插入图片描述
(4)
“”"
模拟轮盘抽奖游戏
轮盘分为三部分: 一等奖, 二等奖和三等奖;
轮盘转的时候是随机的,
如果范围在[0,0.08)之间,代表一等奖,
如果范围在[0.08,0.3)之间,代表2等奖,
如果范围在[0, 1.0)之间,代表3等奖,

模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.
“”"

import random
lb = []
for i in range(1000):
    lb.append(random.random())
zd = {
    '一等奖':0,
    '二等奖':0,
    '三等奖':0
}
for i in lb:
    if i<0.08:
        zd['一等奖'] += 1
    elif i>=0.08 and i<0.3:
        zd['二等奖'] += 1
    else :
        zd['三等奖'] += 1
print(zd)

在这里插入图片描述
7.字典生成式
#需求1:假设有20个学生,学生名为westosX,学生成绩在60~100之间,筛选出成绩在90分以上的学生
(1)方法1

import random
stuInfo = {}
for i in range(20):
    name = 'westos' + str(i)
    score = random.randint(60,100)
    stuInfo[name] = score


highscore = {}
for name,score in stuInfo.items():
    if score > 90:
        highscore[name] = score

print(highscore)

(2)方法2

print({name: score for name,score in stuInfo.items() if score > 90})

在这里插入图片描述
#需求2:将所有key值变为大写

d = dict(a=1,b=2)
print(d)
(1)方法1
new_d = {}
for i in d:
    new_d[i.upper()] = d[i]

print(new_d)
(2)方法2
print({k.upper():v for k,v in d.items()})

在这里插入图片描述
#需求3:大小写、value值和并,统一以小写输出

d = dict(a=2,b=1,c=2,B=9,A=10)
(1)方法1
new_d = {}
for k,v in d.items():
    low_k = k.lower()
    if low_k not in new_d:
        new_d[low_k] = v
    else:
        new_d[low_k] += v

print(new_d)
(2)方法2
print({k.lower():d.get(k.lower(),0) + d.get(k.upper(),0) for k in d})

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值