0
点赞
收藏
分享

微信扫一扫

DAY5 dictset & 字符编码

一、数据类型-元组tuple

一句话定义,元组是只读列表,一量创建,不可修改。只可进行查询、切片、循环操作。

>>> names = ()
>>> type(names)
<class 'tuple'>

>>> names = ("Alex","zhang",)
>>> names = ("Alex","zhang","zhao","li")
>>> names[0::2]
('Alex', 'zhao')
>>> names[0] = "Alex li"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

元组中的列表是可修改呢。只引用了列表的地址
>>> t = (1,2,3,[3,5,7])
>>> t[3]
[3, 5, 7]
>>> t[3][1] = 'Test'
>>> t
(1, 2, 3, [3, 'Test', 7])

创建一个元素的元组需要在第一个元素后面加一个","
>>> t = (1)
>>> type(t)
<class 'int'>
>>> t = (1,)
>>> type(t)
<class 'tuple'>

二、数据类型-字典dict

在复杂列表中需要查询某个值的时候,需要遍历for整个列表。在大的列表中会很慢。

字典不会因为字典太大而影响查询速度。

2.2 dict定义

{key1:value1,key2:value2} 

info = {
"name" : "Alex Li",
"age" : 26
}

: 号左边是key,右边是value

dict特性

1.key-value结构

2.key必须是不可变数据类型(字符串、数字、元组),(hashtable)

3.key必须唯一

4.一个key对应的value可存放任意数据类型,可修改、可以不唯一

5.可嵌套,即value也可是dict

6.py3.7之前是无序的,3.7开始变成有序的了,(ordered_dict)

7.查询速度快,且不受dict的大小影响。

3.增删改查

创建

# 方法1
>>> info = {
"name" : "Alex Li",
"age" : 26
}
# 方法2
>>> info = dict(name="alex",age=22)
>>> info
{'name': 'alex', 'age': 22}

>>> info["salary"] = 5000
>>> info
{'name': 'alex', 'age': 22, 'salary': 5000}
>>>

检查式新增

向dict里新增一个key,value值,如果这个key不存在,新增。如果key不存在反回已存在这个key对应的value

info.setdedefault()

普通修改

>>> info
{'name': 'alex', 'age': 22, 'salary': 5000}
>>>
>>> info["name"] = "Alex Li"
>>> info
{'name': 'Alex Li', 'age': 22, 'salary': 5000}
>>>

合并修改

把另外一个dict合并进来

staff_list = {
"alex": [23, "CEO", 66000],
"黑姑娘": [24, "行政", 4000],
"xiao_yun": [22, "Student", 2000]
}

names = {
"xiao_yun": [25, "前端开发", 12000],
"Celina": [23, "UE", 9999]
}

staff_list.update(names) # 把names的每个k,v赋值给staff_list
print(staff_list)

相当于
# for k in names:
# staff_list[k] = names[k]

结果:{'alex': [23, 'CEO', 66000], '黑姑娘': [24, '行政', 4000], 'xiao_yun': [25, '前端开发', 12000], 'Celina': [23, 'UE', 9999]}

>>>names = {'alex': [23, 'CEO', 66000], '黑姑娘': [24, '行政', 4000], 'xiao_yun': [25, '前端开发', 12000], 'Celina': [23, 'UE', 9999]}

# get方法
>>> names.get("alex")

# 直取
>>> names["alex2"]
会报错,因为在这个字典中没有alex2的key
>>> names["alex"]
[23, 'CEO', 66000]

#使用get去取key的值如果没有的话也不会报错,返回None。使用直取的方式没有就会报错。

dic.keys()    # 返回key
dic.values()
dic.items()

>>> names
{'alex': [23, 'CEO', 66000], '黑姑娘': [24, '行政', 4000], 'xiao_yun': [25, '前
端开发', 12000], 'Celina': [23, 'UE', 9999]}
>>> names.keys()
dict_keys(['alex', '黑姑娘', 'xiao_yun', 'Celina'])
>>> names.values()
dict_values([[23, 'CEO', 66000], [24, '行政', 4000], [25, '前端开发', 12000], [2
3, 'UE', 9999]])
>>> names.items()
dict_items([('alex', [23, 'CEO', 66000]), ('黑姑娘', [24, '行政', 4000]), ('xiao
_yun', [25, '前端开发', 12000]), ('Celina', [23, 'UE', 9999])])

删除:

names.pop("alex")  #删除指定key,返回value
del names["alex"] #删除指定key,不返回value
names.popitem() #以LIFO(先进后出)的方式删除一对值,从字典的后面开始删除
names.clear() #清空dict

循环

for k in dic.keys()
for k,v in dic.items()
for k in dic #推荐用这种方式,默认是用字典的keys

for k in info:
print(k,info[k])

特殊方法

fromkeys:批量生成多个k,v的dict

>>> n = ['alex','jack','rain']
>>> dict.fromkeys(n,0) # 0可以换成其他的
{'alex': 0, 'jack': 0, 'rain': 0}
>>>

copy:浅copy,同列表的copy一样

求长度

len(info)  #有多少key就有多少长度


举报

相关推荐

Leetcode day5

入门python Day5

Java学习 day5

C++ day5

js复习-day5

DAY5 / CSS / 背景

rhcsa Day5 作业

java算法day5

JS基础Day5

0 条评论