天池龙珠--字典,python

本文介绍了Python中的字典和序列的区别,强调了字典作为唯一映射类型的特点,以及可变类型和不可变类型的概念。同时,提供了如何判断数据类型是否可变的方法,并展示了字典的创建、访问和操作,包括内置函数和方法。还包含了一个练习题,涉及字典的基本操作,如修改、删除、添加键值对等。
摘要由CSDN通过智能技术生成

本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql

字典
序列和字典的区别

​ 序列是以连续的整数为索引

​ 字典以"关键字"为索引,关键字可以是任意不可变类型,通常用字符串 或数值。

​ -----------字典是唯一映射类型

什么叫可变类型

​ 在计算机科学中,数据类型分为两种:可变类型(Mutable)和不可变类型(Immutable)。

可变类型指的是在创建后可以修改其内容,而不改变其身份(内存地址)。换句话说,可变类型的对象可以添加、删除或修改其元素,但其内存地址不会改变。

  • 可以在不改变对象身份的情况下修改其内容。
  • 修改可变对象不会创建一个新的对象,而是在原对象上进行更改。
  • 可变对象可以作为字典的键(因为键必须是不可变的,而值可以是可变的)。

不可变类型指的是一旦创建后,就不能更改其内容。如果想要修改不可变类型的值,只能创建一个新的对象,并将其赋值给变量。

  • 一旦创建后,内容不能修改,任何修改都会创建一个新的对象。
  • 不可变对象在内存中的地址是固定的。
  • 不可变对象在作为字典的键时是安全的,因为它们的值不会更改。

Python中

​ 可变类型包括列表(list)、字典(dictionary)、集合(set)等,

​ 不可变类型包括整数(int)、浮点数(float)、字符串(str)、元组(tuple)、冻结集合(frozenset)等。

怎么判断一个数据类型是不是可变类型
  1. 麻烦方法:用 id(X) 函数,对 X 进行某种操作,比较操作前后的 id ,如果不一样,则 X 不可变,如果一样,则 X 可变。

  2. 便捷方法:用 hash(X) ,只要不报错,证明 X 可被哈希,即不可变,反过来不可被哈希,即可变。


定义

​ 1.无序的

​ 2.基本元素(key:value)

​ 3.集合性质:键(key) 必须互不相同,键一般是唯一的,如果重复最后的一个键值对会替换前面的

语法
{元素, 元素, 元素, ……,元素n}
d = {key1 : value1, key2 : value2 }

1.元素:(key : value)

2.符号: { } , :

​ { }把所有元素绑在一起

​ , 分割元素

​ : 分割 键和值

3.key:

​ 必须是不可变类型,比如:整数(int)、浮点数(float)、字符串(str)、元组(tuple)、冻结集合(frozenset)

​ 键(key) 必须互不相同,键一般是唯一的,如果重复最后的一个键值对会替换前面的

创建和访问字典
slogan = {'佳能':'感动常在', '小米':'让每个人都能享受科技的乐趣', '任天堂':'Wii would like to play'}
print(slogan['任天堂'])  # Wii would like to play

字典内置函数&方法

Python字典包含了以下内置函数:

序号函数及描述
1cmp(dict1, dict2) 比较两个字典元素。
2len(dict) 计算字典元素个数,即键的总数。
3str(dict) 输出字典可打印的字符串表示。
4type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。

Python字典包含了以下内置方法:

序号函数及描述
1dict.clear() 删除字典内所有元素
2dict.copy() 返回一个字典的浅复制
3dict.fromkeys(seq[, value]) 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
4dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
5dict.has_key(key) 如果键在字典dict里返回true,否则返回false
6dict.items() 以列表返回可遍历的(键, 值) 元组数组
7dict.keys() 以列表返回一个字典所有的键
8dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9dict.update(dict2) 把字典dict2的键/值对更新到dict里
10dict.values() 以列表返回字典中的所有值
11[pop(key,default]) 删除字典给定键 key 所对应的键值对,返回值为被删除的值。key值必须给出。 否则,返回default值。
12popitem() 返回并删除字典中的最后一对键和值。
练习题
  1. 字典基本操作

    ​ 字典内容如下:

    dic = {
     'python': 95,
     'java': 99,
     'c': 100
    }
    

    用程序解答下面的题目

字典的长度是多少

a. 请修改’java’ 这个key对应的value值为98

b. 删除 c 这个key

c. 增加一个key-value对,key值为 php, value是90

d. 获取所有的key值,存储在列表里

e. 获取所有的value值,存储在列表里

f. 判断 javascript 是否在字典中

g. 获得字典里所有value 的和

h. 获取字典里最大的value

i. 获取字典里最小的value

j. 字典 dic1 = {‘php’: 97}, 将dic1的数据更新到dic中

dic = {
    'python': 95,
    'java': 99,
    'c': 100
}
print(dic)  # {'python': 95, 'java': 99, 'c': 100}
# a
dic['java'] = 98
print(dic)  # {'python': 95, 'java': 98, 'c': 100}
# b
print(dic.pop('c'))  # 100
print(dic)  # {'python': 95, 'java': 98}
# c
dic['php'] = 90
print(dic)  # {'python': 95, 'java': 98, 'php': 90}
# d
key_list = dic.keys()
print(key_list)  # dict_keys(['python', 'java', 'php'])
# e
value_list = dic.values()
print(value_list)  # dict_values([95, 98, 90])
# f
print(dic.get('javascript'))  # None
print(dic.get('php'))  # 90
# g
sum_value = 0
for key in dic:
    sum_value += dic[key]
print(sum_value)  # 283
# h
max_value = max(dic.values())
print(max_value)  # 98
# i
min_value = min(dic.values())
print(min_value)  # 90
# j
dic1 = {'php' : 97}
dic.update(dic1)
print(dic)  # {'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类型

def transfer_score(score_dict):
    type_score = type(score_dict)
    if type_score == dict:
        for key in score_dict:
            score_dict[key] = transfer_score(score_dict[key])
    elif type_score == list:
        for x in score_dict:
            score_dict = transfer_score(x)
    else:
        score_dict = int(score_dict)
    return score_dict

data = {
    'python': {'上学期': '90', '下学期': '95'},
    'c++': ['95', '96', '97'],
    'java': [{'月考': '90', '期中考试': '94', '期末考试': '98'}]
}

data = transfer_score(data)

print(data)

# {'python': {'上学期': 90, '下学期': 95}, 'c++': 97, 'java': {'月考': 90, '期中考试': 94, '期末考试': 98}}

使用递归思想:

​ 先判断类型,

​ 字典

​ 递归调用,访问值,更新值

​ 列表

​ 递归调用,访问元素, 更新元素

​ 字符串

​ 转换为int型,返回值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值