python_字典

1、字典的定义

  • 字典是一个无序的数据集合,使用print输出字典的时候,通常输出的顺序和定义的顺序是不一致的
users = ['user1' , 'user2' , 'user3']
passwd = ['123' , '456' , '789']
print(zip(users,passwd))
print(list(zip(users,passwd)))
print(dict(zip(users,passwd)))
运行结果:
<zip object at 0x7f2cf3e87348>
[('user1', '123'), ('user2', '456'), ('user3', '789')]
{'user1': '123', 'user2': '456', 'user3': '789'}
  • 空字典
s = {}
print(type(s))
运行结果:
<class 'dict'>
  • 字典:key - value 键值对;value可以是任意数据类型
s = {
    'linux':[100,99,98],
    'python':[89,79,98],
    'westos':23
}
print(s,type(s))
运行结果:
{'linux': [100, 99, 98], 'python': [89, 79, 98], 'westos': 23} <class 'dict'>
  • 工厂函数
d = dict()
print(type(d))
d1 = dict(a=1,b=2)
print(d1,type(d1))
运行结果:
<class 'dict'>
{'a': 1, 'b': 2} <class 'dict'>
  • 字典的嵌套
students = {
    '03113009':{
        'name':'wsp',
        'age':18,
        'score':80
    },
    '03113010':{
        'name': 'laoli',
        'age': 30,
        'score': 59
    }
}
print(students['03113010']['age'])
运行结果:
30
  • 所有的key的value值是一样的情况
print({}.fromkeys({'1','2'},'002'))
运行结果:
{'1': '002', '2': '002'}

2、字典的特性

字典不支持索引,不支持切片,字典的重复和连接无意义

  • 成员操作符
d = {
    '1':'a',
    '2':'b'
}
print('1' in d)
运行结果:
True
  • for循环
for i in d:  ###循环的是key的值
    print(i)
运行结果:
1
2
  • 遍历字典
for i in d:
    print(i,d[i])
运行结果:
1 a
2 b

3、字典的增加

  • 增加一个元素
  • 如果key值存在,则更新对应的value值
  • 如果key值不存在,则添加对应key-value
services = {
    'http':80,
    'ftp':21,
    'ssh':22
}
print(services)
services['mysql'] = 3306
print(services)
services['http'] = 222
print(services)
运行结果:
{'http': 80, 'ftp': 21, 'ssh': 22}
{'http': 80, 'ftp': 21, 'ssh': 22, 'mysql': 3306}
{'http': 222, 'ftp': 21, 'ssh': 22, 'mysql': 3306}
  • 添加多个key-value值
  • 同样,如果新添加的多个键值对中有原来的key,则更新。
services = {
    'http':80,
    'ftp':21,
    'ssh':22
}
print(services)
services1 = {
    'mysql':3306,
    'tomcat':8080,
    'https':443,
    'http':222
}
services.update(services1)
print(services)
运行结果:
{'http': 80, 'ftp': 21, 'ssh': 22}
{'http': 222, 'ftp': 21, 'ssh': 22, 'mysql': 3306, 'tomcat': 8080, 'https': 443}
  • setdefault 添加 key 值
  • 如果key值存在,不做修改
  • 如果key值不存在,添加对应的key-value
services = {
    'http':80,
    'ftp':21,
    'ssh':22
}
print(services)
services.setdefault('http',8080)
print(services)
services.setdefault('tomcat',8080)
print(services)
运行结果:
{'http': 80, 'ftp': 21, 'ssh': 22}
{'http': 80, 'ftp': 21, 'ssh': 22}
{'http': 80, 'ftp': 21, 'ssh': 22, 'tomcat': 8080}

4、字典的删除

  • del
services = {
    'http':80,
    'ftp':21,
    'ssh':22
}
print(services)
del services['http']
print(services)
运行结果:
{'http': 80, 'ftp': 21, 'ssh': 22}
{'ftp': 21, 'ssh': 22}
  • pop:删除指定key的key-value
  • 如果key存在,删除,并返回删除key对应的value
  • 如果不存在,报错
services = {
    'http':80,
    'ftp':21,
    'ssh':22
}
print(services)
item = services.pop('http')
print(item)
print(services)
运行结果:
{'http': 80, 'ftp': 21, 'ssh': 22}
80
{'ftp': 21, 'ssh': 22}
  • popitem:删除最后一个key-value值
services = {
    'http':80,
    'ftp':21,
    'ssh':22
}
print(services)
item = services.popitem()
print(item)
print(services)
运行结果:
{'http': 80, 'ftp': 21, 'ssh': 22}
('ssh', 22)
{'http': 80, 'ftp': 21}
  • 清空字典内容
services = {
    'http':80,
    'ftp':21,
    'ssh':22
}
print(services)
services.clear()
print(services)
运行结果:
{'http': 80, 'ftp': 21, 'ssh': 22}
{}

5、字典的查看

  • 查看字典的key值
services = {
    'http':80,
    'ftp':21,
    'ssh':22
}
print(services.keys())
运行结果:
dict_keys(['http', 'ftp', 'ssh'])
  • 查看字典的value值
print(services.values())
运行结果:
dict_values([80, 21, 22])
  • 查看字典的key-value值
print(services.items())
运行结果:
dict_items([('http', 80), ('ftp', 21), ('ssh', 22)])
  • 查看key的value值
  • key不存在,默认返回none
  • key不存在,有default值,则返回default值
print(services.get('http'))
print(services.get('https'))
运行结果:
80
None
  • 遍历
services = {
    'http':80,
    'ftp':21,
    'ssh':22
}
for k,v in services.items():
    print(k,'--->',v)
运行结果:
http ---> 80
ftp ---> 21
ssh ---> 22

6、字典的练习

  • 例1
"""
# _*_coding:utf-8 _*_
Name:字典_06.py
Date:4/3/19
Author:LiMin-wsp
Connect:314690259@qq.com
Desc:
"""
"""
 重复的单词: 此处认为单词之间以空格为分隔符, 并且不包含,和.>;
    # 1. 用户输入一句英文句子;
    # 2. 打印出每个单词及其重复的次数;
 "hello java hello python"
# hello 2
# java 1
# python 1
"""
s = input('请输入: ')
s_li = s.split()   #将输入的句子分割
d = {}             #定义一个空字典,用来保存结果
for item in s_li:     #遍历,如果key值不存在,就将key值才存入字典,其value值为1
    if item not in d:
        d[item] = 1
    else:           #如果key值存在,直接更新元素的value值,在原有的基础上加1
        d[item] += 1
print(d)
运行结果:
请输入: hello java hello python
{'hello': 2, 'java': 1, 'python': 1}
  • 例2
"""
# _*_coding:utf-8 _*_
Name:字典_07.py
Date:4/3/19
Author:LiMin-wsp
Connect:314690259@qq.com
Desc:
"""
"""
#数字重复统计:
    1)随机生成1000个整数;
    2)数字范围[20,100];
    3)升序输出所有不同的数字及其每个数字重复的次数
"""
import random
num_list = []
num_dict = {}
for i in range(1000):
    num_list.append(random.randint(20,100))
    num_list_sort = sorted(num_list)   ##sorted返回的还是一个列表,而sort只是列表自己的sort方法,是对列表的原址排序
for num in num_list_sort:
    if num not in num_dict:
        num_dict[num] = 1
    else:
        num_dict[num] += 1
print(num_dict)
运行结果:
{20: 14, 21: 18, 22: 9, 23: 10, 24: 18, 25: 16, 26: 14, 27: 15, 28: 5, 29: 16, 30: 14, 31: 7, 32: 18, 33: 18, 34: 16, 35: 17, 36: 8, 37: 13, 38: 14, 39: 13, 40: 16, 41: 15, 42: 12, 43: 6, 44: 14, 45: 13, 46: 10, 47: 13, 48: 10, 49: 9, 50: 11, 51: 17, 52: 14, 53: 13, 54: 15, 55: 6, 56: 14, 57: 10, 58: 10, 59: 16, 60: 11, 61: 8, 62: 17, 63: 6, 64: 13, 65: 14, 66: 13, 67: 10, 68: 17, 69: 9, 70: 12, 71: 14, 72: 16, 73: 15, 74: 12, 75: 16, 76: 8, 77: 15, 78: 5, 79: 6, 80: 12, 81: 17, 82: 6, 83: 15, 84: 11, 85: 8, 86: 16, 87: 20, 88: 14, 89: 17, 90: 14, 91: 6, 92: 9, 93: 4, 94: 14, 95: 10, 96: 10, 97: 11, 98: 12, 99: 15, 100: 5}
  • 例3
"""
# _*_coding:utf-8 _*_
Name:字典_08.py
Date:4/3/19
Author:LiMin-wsp
Connect:314690259@qq.com
Desc:
"""
"""
# 1. 随机生成100个卡号;
#     卡号以6102009开头, 后面3位依次是 (001, 002, 003, 100>),
# 2. 生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";

# 3. 输出卡号和密码信息, 格式如下:
卡号                  密码
6102009001              000000
"""
import random
s = []
d = {}
for i in range(1,101):
    s1 = '6102009%.3d'%i
    s.append(s1)
s2={}.fromkeys(s,'redhat')  ##所有的key值的value值一样时候,将key和value添加到字典
print('银行卡号\t\t\t密码')
for k,v in s2.items():   ##遍历s2字典的key和value值
    print('%s\t\t\t%s' %(k,v))
运行结果:
银行卡号			密码
6102009001			redhat
6102009002			redhat
6102009003			redhat
6102009004			redhat
……  				……
6102009098			redhat
6102009099			redhat
6102009100			redhat
  • 例4
"""
# _*_coding:utf-8 _*_
Name:字典_09.py
Date:4/3/19
Author:LiMin-wsp
Connect:314690259@qq.com
Desc:
"""
"""
模拟轮盘抽奖游戏
# 轮盘分为三部分: 一等奖, 二等奖和三等奖;
# 轮盘转的时候是随机的,
#       如果范围在[0,0.08)之间,代表一等奖,
#       如果范围在[0.08,0.3)之间,代表2等奖,
#       如果范围在[0, 1.0)之间,代表3等奖,

# 模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.
"""
import random
RewardCount = {   ##定义一个字典,用来存放获奖对应的名次的概率
    '一等奖':(0,0.08),
    '二等奖':(0.08,0.3),
    '三等奖':(0.3,1.0)
}
def RewardGet():    ##定义一个获奖等级函数;
    num = random.random()    ##生成一个随机数
    for k,v in RewardCount.items():   ##遍历RewardCount字典的key和value值
        if v[0] <= num <= v[1]:      ##判断随机生成的数是否在获奖名次对应的获奖概率区间内
            return k       ##如果在,就返回该概率对应的获奖名次
ResultPeople = {}       ##定义一个空字典,用来存放获奖的名单和相对应的人数
for i in range(1000):    ##遍历这1000个人中获奖情况
    res = RewardGet()    ##调用函数,将获奖信息key值赋值给res
    if res not in ResultPeople:   ##判断获得的奖项是否在获奖名单的字典内
        ResultPeople[res] = 1     ##如果不在,则添加上并将其value值设置为1
    else:
        ResultPeople[res] += 1    ##如果存在,就将原来的值更新加1

for k,v in ResultPeople.items():   ##打印这个字典里的key和value值
    print(k,'------>',v) 
运行结果:
三等奖 ------> 702
二等奖 ------> 216
一等奖 ------> 82
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值