Python基础之字典

DataWhale-Python基础-7.字典

1.字典的定义

字典是无序的 键:值(key:value)对集合,键必须是互不相同的(在同一个字典之内)。

  • dict 内部存放的顺序和 key 放入的顺序是没有关系的。
  • dict 查找和插入的速度极快,不会随着 key 的增加而增加,但是需要占用大量的内存。

字典 定义语法为 {元素1, 元素2, …, 元素n}

  • 其中每一个元素是一个「键值对」-- 键:值 (key:value)
  • 关键点是「大括号 {}」,「逗号 ,」和「冒号 :」
  • 大括号 – 把所有元素绑在一起
  • 逗号 – 将每个键值对分开
  • 冒号 – 将键和值分开

2.字典的创建

#字典的创建
dic1 = dict()
dic1['1'] = 'a'
dic1['2'] = 'b'
dic1['3'] = 'c'
dic1
# {'1': 'a', '2': 'b', '3': 'c'}

#dict(mapping)
dic2 = dict([('apple',5),('pear',4),('banana',3),('watermelom',10)])
dic2
#{'apple': 5, 'pear': 4, 'banana': 3, 'watermelom': 10}

#dict(**kwargs)
dic3 = dict(name1 = 'Ray', name2 ='Wine', name3 = 'Dwyane' )
dic3
#{'name1': 'Ray', 'name2': 'Wine', 'name3': 'Dwyane'}

3.字典的内置方法

  • dict.fromkeys(seq[, value]): 用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
#fromkeys方法主要是用来设置初始值
seq = ('name', 'age', 'sex')
dic1 = dict.fromkeys(seq)
print(dic1)
# {'name': None, 'age': None, 'sex': None}

dic2 = dict.fromkeys(seq, 10)
print(dic2)
# {'name': 10, 'age': 10, 'sex': 10}

dic3 = dict.fromkeys(seq, ('小马', '8', '男'))
print(dic3)
# {'name': ('小马', '8', '男'), 'age': ('小马', '8', '男'), 'sex': ('小马', '8', '男')}
  • dict.keys():返回一个可迭代对象,可以使用 list() 来转换为列表,列表为字典中的所有键。
  • dict.values():返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值。
  • dict.items():以列表返回可遍历的 (键, 值) 元组数组。
  • dict.get(key, default=None): 返回指定键的值,如果值不在字典中返回默认值。
  • dict.setdefault(key, default=None):和get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
dic1.keys()
list(dic1.keys())
# [1,2,3]

dic1.values()
list(dic1.values())
# ['a','b','c']

dic1.items()
list(dic1.items())
# [('1','a'),('2','b'),('3','c')]

dic1.get('1')
# a

dic1.setdefault('f')
dic1
# {'1': 'a', '2': 'b', '3': 'c', 'f': None}
  • key in dict: in 操作符用于判断键是否存在于字典中,如果键在字典 dict 里返回true,否则返回false。而not in操作符刚好相反,如果键在字典 dict 里返回false,否则返回true。
'1' in dic1
# True
'10' in dic1
# False
  • dct.pop(key[,default]):删除字典给定键 key 所对应的值,返回值为被删除的值。key 值必须给出。若key不存在,则返回 default 值。
  • del dict[key]: 删除字典给定键 key 所对应的值。
  • dict.popitem():随机返回并删除字典中的一对键和值,如果字典已经为空,却调用了此方法,就报出KeyError异常。
  • dict.clear():用于删除字典内所有元素。
dic1.pop('f')
#{'1': 'a', '2': 'b', '3': 'c'}

del dic1['1']
#{'2': 'b', '3': 'c'}

dic1.clear()
#{}
  • dict.copy():返回一个字典的浅复制。
  • dict.update(dict2):把字典参数 dict2 的 key:value对 更新到字典 dict 里。
dic = {'Name': 'Lsgogroup', 'Age': 7}
dic2 = {'Sex': 'female', 'Age': 8}
dic.update(dic2)
print(dic)  
# {'Sex': 'female', 'Age': 8, 'Name': 'Lsgogroup'}

练习题
1.字典的基本操作

print(len(dic))

dic['java'] = 98

dic.pop('c')
#del dic['c']

dic['php'] = 90

keys_list = list(dic.keys())
values_list = list(dic.values())

print('javascript' in dic)

print(sum(values_list))

print(max(dic.values()))
print(min(dic.values()))

dic1 = {'php':97}
dic.update(dic1)
dic
# 3
# False
# 283
# 98
# 90
# {'python': 95, 'java': 98, 'php': 97}

2、字典中的value

有一个字典,保存的是学生各个编程语言的成绩,内容如下

data = {
‘python’: {‘上学期’: ‘90’, ‘下学期’: ‘95’},
‘c++’: [‘95’, ‘96’, ‘97’],
‘java’: [{‘月考’:‘90’, ‘期中考试’: ‘94’, ‘期末考试’: ‘98’}]
}
各门课程的考试成绩存储方式并不相同,有的用字典,有的用列表,但是分数都是字符串类型,请实现函数transfer_score(score_dict),将分数修改成int类型

data = {
        'python': {'上学期': '90', '下学期': '95'},
        'c++': ['95', '96', '97'],
        'java': [{'月考':'90', '期中考试': '94', '期末考试': '98'}]
        }
        
def transfer_score(data):
    for k1,v1 in data.items():
        if type(v1) == dict:
            for k2,v2 in data[k1].items():
                data[k1][k2] = int(v2)
                
        elif type(v1) == list:
            for i in range(len(data[k1])):
                if type(data[k1][i]) == dict:
                    for k3,v3 in data[k1][i].items():
                        data[k1][i][k3] = int(v3)
                else:
                    data[k1][i] = int(data[k1][i])
    return data

transfer_score(data)
#{'python': {'上学期': 90, '下学期': 95},
# 'c++': [95, 96, 97],
# 'java': [{'月考': 90, '期中考试': 94, '期末考试': 98}]}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值