数据蛙强化课程第二期数据蛙数据分析每周作业数据蛙强化课程第一期

python day2 知识点归纳

2019-03-05  本文已影响33人  Chad你要加油

dict(字典)

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

字典是另一种可变容器模型,且可存储任意类型对象

key-value

字典定义

dict = { "say": "hello", "python":3, 11:0.999, 20:["Hi", 80], (6, 2):True}

assert dict == {'say': 'hello', 'python': 3, 11: 0.999, 20: ['Hi', 80], (6, 2):True}

字典访问

通过指定key值访问对应的value:

dict = { "say": "hello", "python":3, 10:0.999, 20:["Hi", 60]}

assert dict["say"] == "hello"
assert dict[20] == ["Hi", 60]
# 不存在时 报KeyError
try:
    print(dict["city"]) 
except KeyError:
    pass

字典长度

dict = {'city': 'guangzhou', 'university': '[null](https://www.baidu.com)', 'ccege': 'gz', 'degree': 'Master'}
# 字典长度  assert len(dict) == 4

字典打印

字典打印(以字符串形式)。

dict = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}

# 字典打印(以字符串形式)
assert str(dict) == "{'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}"

字典复制

浅复制。

dict = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}

# 字典复制
assert dict.copy() == dict
assert id(dict.copy()) != id(dict)

字典取值

不修改 字典:

dict.get(key, default=None)

Args:

key: 字典中要查找的键。
default: 如果指定键的值不存在时,返回 该默认值 。
dict = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}
#返回指定键的值
assert dict.get("city") == "guangzhou"

# 返回指定键的值,如果值在字典中,default值无效
assert dict.get("city", "Shanghai") == "guangzhou"

# 返回指定键的值,如果值不在字典中,返回default值
assert dict.get("province", "jiangshu") == "jiangshu"

修改 字典:

dict.setdefault(key, default=None)

Args:

key: 字典中要查找的键。
default: 如果指定键的值不存在时,返回 该默认值值,并 修改 字典,添加上该 key-value对 。
dict = {'city': 'guangzhou', 'university': 'null'}    # guangzhou

####和get()类似
print(dict.setdefault('city'))

# 但如果键不存在于字典中,将会返回default值。 并且修改字典,添加键并将值设为default
print(dict.setdefault('ccege', 'gz'))    # gz
print(dict.setdefault('location'))    # None
print(dict)    #  {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'location': None}

key 存在

if i in dict

dict = {'city': 'guangzhou', 'university': 'null'}

# 检测键 city 是否存在
if 'city' in dict:
    print("键 city 存在")
else :
    print("键 city 不存在")

可遍历的 key-value 数组

dict.items()
以列表 返回 可遍历的 ## (key-value)元组数组 。

dict = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}

print(type(dict.items())) # <class 'dict_items'>

print(dict.items()) # dict_items([('city', 'guangzhou'), ('university:', 'null'), ('ccege', 'gz'), ('degree', 'Master')])

for i, j in dict.items():
    print(i, ":\t", j)
# city :     guangzhou
# university :   null
# ccege :  gz
# degree :   Master

key列表

dict.keys()
以 dict列表 返回字典中的所有key。

dict = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}

# 以列表返回一个字典所有的key
print(dict.keys())    # dict_keys(['city', 'university', 'ccege', 'degree'])

for i in dict.keys():
    print(i)
# city
# university
# ccege
# degree

# 也可转化为list进行操作
list_ = list(dict.keys())
list_.sort()
for i in list_:
    print(i)
# city
# ccege
# degree
# university

value列表

dict.values()
以 dict列表 返回字典中的所有value。

dict = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}

# 以列表返回一个字典所有的value
print(dict.values())    # dict_values(['guangzhou', 'null', 'gz', 'Master'])

for i in dict.values():
    print(i)
# guangzhou
# null
# gz
# Master

# 也可转化为list进行操作
list_ = list(dict.values())
list_.sort()
for i in list_:
    print(i)
# null
# gz
# Master
# guangzhou

字典合并

通过 update 合并字典。

dict = {"city":"guangzhou", "university":"null"}
dict_2 = {"ccege":"gz", "degree":"Master"}

dict.update(dict_2)
assert dict == {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}

字典删除

通过 .pop() :

dict.pop(key[,default])
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。

dict = {'city': 'guangzhou', 'university': 'null'}

# 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
print(dict.pop('city'))    # guangzhou
print(dict)    # {'university': 'null'}
print(dict.pop('city', 'ccege'))    # ccege
通过 del :
dict_1 = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}

# 删除key-value:  'city': 'guangzhou'
del dict_1['city']    
assert dict_1 == {'university': 'null', 'ccege': 'gz', 'degree': 'Master'}

# 删除字典
del dict_1            
try:
    print(dict_1)
except NameError:
    pass
通过 .popitem() :

dict.popitem()
随机返回并删除字典中的一对键和值(一般删除末尾对)。

dict = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}

# 随机返回并删除字典中的一对键和值(一般删除末尾对)。
print(dict.popitem())    # ('degree', 'Master')
print(dict)    # {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz'}

字典清空

通过 .clear() :
dict_1 = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}

# 清空字典
dict_1.clear()        
assert dict_1 == {}
set(集合)

set是一组无序排列的可哈希的值,因此可以用作字典中的键。

set具有以下特性:

  1. 元素不重复出现
  2. 元素必须是不可变对象
    我们也可以把可以把set当作是dict中的键来理解,当然仅仅限于数据结构层面。

set基本操作

创建

#调用set方法创建

s = set() #创建空set
a = set('bread') #以字符串创建set
b = set(['r', 'd', 'a', 'b', 'e']) #以list创建set
c = set({'k1':'value1', 'k2':'value2', 'k3': 'value3'}) #以dict创建set

#使用"="创建
d = {'k1', 'k2', 'k3'}
e = {('k1', 'k2', 'k3')} #使用tuple创建

print(a,type(a))
print(b,type(b))
print(c,type(c))
print(d,type(d))
print(e,type(e))

执行结果为:


·无序无重复元素

集合数学运算并、交、差、对称差操作符

a = l | s          # l 和 s的并集  
b = l & s          # l 和 s的交集
c = l – s          # 求差集
d = l ^ s          # 对称差集

基本操作

集合本身的增、删

>>>s = set([1, 2, 3, 4])
>>>s
{1, 2, 3, 4}
>>> s.add(5) #增加元素
>>> s
{1, 2, 3, 4, 5}
>>> s.remove(5) #删除元素5
>>> s.discard(4) #删除元素4
>>> s.pop() #移除某个元素(在有序数据集pop方法移除末尾元素,无序数据集则不确定)
>>> 1 
{2, 3}
>>> s.update([1, 4, 5]) #添加多个元素
>>> s
{1, 2, 3, 4, 5}
>>> s.clear() #清空所有元素
>>> s
set() #即空集

集合数学运算之并、交 、差方法

a = {11, 22, 33}
b = {22, 33, 44}

#并集
t = a.union(b) #取并集
print(t) #{33, 22, 11, 44}

#交集
t1 = a.intersection(b) #取交集
t2 = a.intersection_update #取交集并用交集更新a本身


#差集
box1 = a.difference(b) 
#相当于数学上的集合a - b 即取差集
print(box1) #{11}
print(a) #{33, 11, 22}

box2 = a.difference_update(b) 
#取差集 并用这些元素覆盖a本身
print(box2) #None
print(a) #{11}

判断

a = {22,33, 44}
b = {33, 44}

print(a.isdisjoint(b))        #判断是否不存在交集 False
#请注意, 没有isjoint(判断是否存在交集这种方法)
print(a.issubset(b))          #判断a是否是b的子集合 False
print(a.issuperset(b))        #判断a是否是b的父集合 True
DataFrog
上一篇 下一篇

猜你喜欢

热点阅读