python:字典

一.字典的创建

1、key-value不同类型的创建

# value为list类型
d1 = {
    '王超': [18, '男', '玩手机'],
    '王凯': [18, '男', '修手机']
}
# value为数值类型
d2 = {
    'a': 1,
    'b': 2
}
# value为集合类型
d3 = {

    'a': {1, 2, 3},
    'b': {2, 3, 4}
}
print(d3)
print(d3['a'])
{'a': {1, 2, 3}, 'b': {2, 3, 4}}
{1, 2, 3}

2、字典的嵌套

students = {
    '06163012': {
        'name': '王凯',
        'age': 18,
        'score': 90
    },
    '03162003': {
        'name': '管良虎',
        'age': 19,
        'score': 80
    }
}
# 查看字典中key为'03162003'的字典中的key为'name'所对应的value
print(students['03162003']['name'])

3、工厂函数

d5 = dict(a=1, b=2)
print(d5)
{'a': 1, 'b': 2}

二.字典的特性

1、不支持索引、切片;并且字典的重复、连接是无意义的(因为key是唯一的)

d = {
    '1':'a',
    '8':'b',
    '2':'a'
}

2、成员操作符:判断的是某个值是否为字典的key

print('1' in d)
print('1' not in d)
True
False

3、for循环: 默认遍历字典的key值

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

三.字典的增加

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

1、增加一个元素

  • 如果key值存在,则更新对应的value值
services['http'] = 443	#'http'存在所以更新value值
print(services)
{'http': 443, 'ftp': 21, 'ssh': 22}
  • 如果key值不存在,则添加对应的key-value值
services['mysql'] = 3306  # 'mysql'不存在,所以添加新的key-value
print(services)
{'http': 80, 'ftp': 21, 'ssh': 22, 'mysql': 3306}

2、增加多个元素(key存在则更新,不存在则添加)

service_backup = {
    'tomcat': 8080,
    'https': 443,
    'http': 8888
}
  • 方法一:更新由多个元素组成的字典
services.update(service_backup)
print(services)
{'http': 8888, 'ftp': 21, 'ssh': 22, 'tomcat': 8080, 'https': 443}
  • 方法二:使用工厂函数
services.update(flask=9000, http=999)
print(services)
{'http': 999, 'ftp': 21, 'ssh': 22, 'flask': 9000}

3、setdefault添加key值

services = {
    'http': 80,
    'ftp': 21,
    'ssh': 22
}
  • 如果key值存在,则不做修改
services.setdefault('http', 9000)  # 注意这里'http'存在,但是不更新value
print(services)
{'http': 80, 'ftp': 21, 'ssh': 22}
  • 如果key值不存在,则添加对应的key-value值
services.setdefault('oracle', 44575)
print(services)
{'http': 80, 'ftp': 21, 'ssh': 22, 'oracle': 44575}

四.字典的删除

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

1、del 关键字

del services['http']
print(services)
{'ftp': 21, 'ssh': 22, 'mysql': 3306}

2、pop删除指定的key的key-value值

  • 如果key存在,删除,并且返回删除key对应的value值
item = services.pop('http')
print(item)  # 删除'http' 键值对,并返回value:80
print(services)
80
{'ftp': 21, 'ssh': 22, 'mysql': 3306}
  • 如果key不存在,直接报错

3、popitem删除最后一个key-value

item = services.popitem()  # 删除最后一个键值对,并返回键值对
print('删除的key-value对应的是:', item)
print(services)
删除的key-value对应的是: ('mysql', 3306)
{'http': 80, 'ftp': 21, 'ssh': 22}

4、清空字典内容

services.clear()
print(services)
{}

五.字典的查看

service = {
    'http': 80,
    'mysql': 3306
}

1、查看key值、查看value值

print(service.keys())
print(service.values())
dict_keys(['http', 'mysql'])
dict_values([80, 3306])

2、遍历字典

  • for循环
for k,v in service.items():		#for循环中两种方法遍历
    print(k,'---->',v)
for k in service:
    print(k,'---->',service[k])
http ----> 80
mysql ----> 3306

3、查看指定key对应的value值(两种方法)

1、第一种

print(service['https'])		#'https'不存在,所以报错

2、第二种,get方法

  • 如果key值存在,返回对应的value值
print(service.get('https'))
输出:None
  • 如果key值不存在,默认返回None,如果需要指定返回的值,传值即可
print(service.get('https', 'key not exit'))  # 指定返回key not exit
输出:key not exit

3、一个应用

通过字典的方法计算出bag列表中某种元素出现的次数。

counter = {}
bag = [1, 2, 5, 2, 4, 1]
for i in bag:
	counter[i] = counter.get(i, 0) + 1
for i in set(bag):
	print("Counter of {}:{}".formate(i, counter.get(i, "none")))
Counter of 1:2
Counter of 2:2
Counter of 4:1
Counter of 5:1

六、字典序列

1、字典排序

adict = {
    '1': 1,
    '3': 3,
    '5': 5,
    '4': 4,
    '2': 2
}

alist = sorted(adict.items(), key=lambda e: e[1], reverse=False)
print(alist)
[('1', 1), ('2', 2), ('3', 3), ('4', 4), ('5', 5)]

其中,e表示dict.items()中的一个元素,e[0]表示按键排序,e[1]则表示按值排序。reverse=False可以省略,默认为升序排列。

说明:字典的items()函数返回的是一个列表,列表的每个元素是一个键和值组成的元组。因此,sorted(dict.items(), key=lambda e:e[1], reverse=True)返回的值同样是由元组组成的列表。

2、字典保持有序

from collections import OrderedDict
dict = OrderedDict()

说明:
1、OrderedDict 的内容维护是一个双向链表,会根据添加元素的顺序来排列键的位置,第一个添加的元素放置在链表的末尾,所以对已经存在的键做重新赋值也不会改变键的顺序

2、ORderedDict的大小是普通字典的两倍多,是因为它额外创建的链表所导致的。因此,构建大量的OrderedDict的数据结构,要具体的做对应的需求分析,

七、字典合并

dic1 = {'1':1,'2':2}
dic2 = {'3':3,'4':4}

dic = {**dic1,**dic2}
dic = dic1|dic2 # python3.9 dic1 |= dic2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值