Python 字典

字典(dict)

字典是 python 中唯一的映射类型,是一个无序的“键:值”对集合,每一个元素都是 pair,包含 key、value两部分。 key 是 Integer 或 string 类型,value 是任意类型,即{ key: value}

  • 字典的定义

关键字(key)必须使用不可变类型,在同一个字典中,关键字必须互不相同

# 字典是一个无序的数据集合,使用print输出字典时
# 通常输出的顺序和定义的顺序不一致
>>> s = {}
>>> print(type(s))
<class 'dict'>

# 字典:key-value 键值对
# value值可以是任意数据类型
	代码:
	s = {
    'linux':[100,99,88],
    'westos':[190,564,645]
	}

	print(s)
	print(type(s))
	运行结果:
	{'linux': [100, 99, 88], 'westos': [190, 564, 645]}
	<class 'dict'>

# 工厂函数
	代码:
	d = dict()
	print(d)
	print(type(d))
	
	d1 = dict(a=1,b=2)
	print(d1)
	print(type(d1))
	运行结果:
	{}
	<class 'dict'>
	{'a': 1, 'b': 2}
	<class 'dict'>

# 字典的嵌套

	students = {
	    '03113009':{
	        'name':'tom',
	        'age':18,
	        'score':80
	    },
	    '03113010':{
	        'name': 'laoli',
	        'age': 19,
	        'score':30
	    }
	}
	
	print(students['03113010']['name'])
	#所有的key和value值是一样的情况
	print({}.fromkeys({'1','2'},'03113009'))

	运行结果:
	laoli
	{'1': '03113009', '2': '03113009'}
  • 字典的特性
# 成员操作符
>>> d = {
...     '1':'a',
...     '2':'b'
... }
>>> print('1' in d)
True
>>> print('1' not in d)
False

# for循环,默认遍历字典的key值
>>> for key in d:
...     print(key)
... 
1
2

#遍历字典
>>> for key in d:
...     print(key,d[key])
... 
1 a
2 b

>>> for key,value in d.items():
...     print(key,value)
... 
1 a
2 b
  • 字典的增加与修改
>>> service = {
...     'http':80,
...     'ftp':21,
...     'ssh':22
... }

# 增加一个元素
# 如果key值存在,则更新对应的value值
# 如果key值不存在,则添加对应的key-value值
>>> service['mysql'] = 3306
>>> print(service)
{'http': 80, 'ftp': 21, 'ssh': 22, 'mysql': 3306}
>>> service['http'] = 443
>>> print(service)
{'http': 443, 'ftp': 21, 'ssh': 22, 'mysql': 3306}

# 添加多个key-value值
>>> service_backup = {
...     'https':443,
...     'tomcat':8080,
...     'http':8080
... }
>>> service.update(service_backup)
>>> print(service)
{'http': 8080, 'ftp': 21, 'ssh': 22, 'mysql': 3306, 'https': 443, 'tomcat': 8080}
>>> service.update(flask=9000,http=8000)
>>> print(service)
{'http': 8000, 'ftp': 21, 'ssh': 22, 'mysql': 3306, 'https': 443, 'tomcat': 8080, 'flask': 9000}

# setdefault添加key值
# 如果key值存在,不做修改
# 如果key值不存在,则添加对应的key-value
>>> service.setdefault('http',9090)
8000
>>> print(service)
{'http': 8000, 'ftp': 21, 'ssh': 22, 'mysql': 3306, 'https': 443, 'tomcat': 8080, 'flask': 9000}
>>> service.setdefault('oracle',44575)
44575
>>> print(service)
{'http': 8000, 'ftp': 21, 'ssh': 22, 'mysql': 3306, 'https': 443, 'tomcat': 8080, 'flask': 9000, 'oracle': 44575}
  • 字典的查看与修改
>>> service = {
...     'http':80,
...     'ftp':21,
...     'ssh':22
... }

# 查看字典的key值
>>> print(service.keys())
dict_keys(['http', 'ftp', 'ssh'])

# 查看字典的value值
>>> print(service.values())
dict_values([80, 21, 22])

# 查看key的value值;key不存在,报错
>>> print(service['https'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'https'

#查看key的value值
#key不存在,默认返回None
#key不存在,有default,则返回default
>>> print(service.get('https',443))
443
>>> print(service.get('https'))
None

# 遍历
>>> for k,v in service.items():
...     print(k,'--->',v)
... 
http ---> 80
ftp ---> 21
ssh ---> 22

>>> print(service['https'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'https'

>>> if 'https' in service:
...     print(service['https'])
... else:
...     print('key not exist')
... 
key not exist

#get方法获取指定key对应的value值
#如果key值存在,返回对应的value值
#如果key值不存在,默认返回None,如果需要指定返回值,传值即可
>>> print(service.get('https','ket not exist'))
ket not exist
  • 字典的删除
>>> service = {
...     'http':80,
...     'ftp':21,
...     'ssh':22
... }

>>> del service['http']
>>> print(service)
{'ftp': 21, 'ssh': 22}

# pop删除指定key的key-value
# 如果key存在,删除,并且返回删除key对应的value
# 如果key不存在,报错
>>> service = {
...     'http':80,
...     'ftp':21,
...     'ssh':22
... }
>>> item = service.pop('http')
>>> print(item)
80
>>> print(service)
{'ftp': 21, 'ssh': 22}
>>> item = service.pop('linux')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'linux'

#popitem删除最后一个key-value值
>>> service = {
...     'http':80,
...     'ftp':21,
...     'ssh':22
... }
>>> item = service.popitem()
>>> print('删除的key-value对是:',item)
删除的key-value对是: ('ssh', 22)
>>> print(service)
{'http': 80, 'ftp': 21}

#清空字典内容
>>> service.clear()
>>> print(service)
{}
  • 字典内置get方法

get方法获取指定key对应的value值
如果key值存在,返回对应的value值
如果key值不存在,默认返回None,如果需要指定返回值,传值即可

>>> info = {'1':'first','2':'second','3':'third'}
>>>print(info.get(input('input type you number:'),'别逗,你输错了!'))      # 指定key不存在时的返回值
input type you number:5
别逗,你输错了
  • 内置方法fromkeys

字典中的 key 有相同的 value 值,默认为 None

>>>dic.fromkeys([1,2,3,5])
{1: None, 2: None, 3: None, 5: None}
>>>dic.fromkeys(['redhat','westos','python'],'hello')
{'redhat': 'hello', 'westos': 'hello', 'python': 'hello'}
  • 字典的排序

使用字典进行数据信息统计时,字典是无序的,则打印输出的字典内容也是无序的,python中字典的排序分为按键 key 排序 和 按值 value 排序,使用内置函数 sorted()

# 1. 按 ‘值(value)’ 排序    
>>> dic = {'班级': 1, 'age': 9, 'score': 10}
>>>sorted(dic.items(), key=lambda e:e[1], reverse=True)
[('score', 10), ('age', 9), ('班级', 1)]                     # ASCII码降序,此处按数值降序
>>>
# 其中 e 表示 dic.items()中的一个元素,e[1]则表示按值排序,reverse=True 表示降序排列

# 2. 按 ‘键(key)’ 排序
>>>sorted(dic.items(), key=lambda e:e[0], reverse=True)
[('班级', 1), ('score', 10), ('age', 9)]                     # ASCII码降序

==说明: ==字典的.items()函数返回的是一个列表,列表的每一个元素都是一个键和值组成的元组,所以该sorted(…)返回的同样是由元组组成的列表,lambda 函数后面介绍

练习

  1. 数字重复统计
数字重复统计:
    1)随机生成1000个整数;
    2)数字范围[20,100];
    3)升序输出所有不同的数字及其每个数字重复的次数
import random

all_nums = []
for item in range(1000):
    all_nums.append(random.randint(20,100))

#对生成的1000个数进行排序,然后加到字典中
sorted_nums = sorted(all_nums)
num_dict = {}
for num in sorted_nums:
    if num in num_dict:
        num_dict[num] += 1
    else:
        num_dict[num] = 1
print(num_dict)
  1. 重复的单词统计
 重复的单词: 此处认为单词之间以空格为分隔符, 并且不包含,和.;
    # 1. 用户输入一句英文句子;
    # 2. 打印出每个单词及其重复的次数;
 "hello java hello python"
# hello 2
# java 1
# python 1
d = {}
s = input('请输入一段英文句子:')
s1 = s.split(' ')
for i in s1:
    if i in d:
        d[i] += 1
    else:
        d[i] = 1
print(d)
  1. 随机生成卡号
# 1. 随机生成100个卡号;
#     卡号以6102009开头, 后面3位依次是 (001, 002, 003, 100>),
# 2. 生成关于银行卡号的字典, 默认每个卡号的初始密码为"redhat";

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

# 3. 输出卡号和密码信息, 格式如下:
卡号                  密码
6102009001              000000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值