python基础三

一、字典disc

  字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的.

数据类型分为:可变数据类型、不可变数据类型

  不可变数据类型:元组、bool、int、str   这些数据类型可哈希

  可变数据类型:列表list、字典dict、集合set  这些数据类型不可哈希

  字典的key必须是不可变的数据类型,可哈希

  字典的value可以是任意数据类型

  字典的优点:二分查找去查询   储存大量的关系型数据

  字典的特点:无序的

1.1 增:

  

dic = {'name':'lucy','sex':'woman','age':18}
dic['hight'] = 180  #没有键的时候,则添加
dic['age'] = 16     #字典中原本就有此键,则值会覆盖掉原来的
dic.setdefault('weight') #默认值是None
dic.setdefault('weight',150)
dic.setdefault('name','二哥')  #键有的话不做任何改变,没有才添加
print(dic)
View Code

1.2删:

dic = {'name':'lucy','sex':'woman','age':18}
dic.pop('age')  #有返回值  返回删除的键对应的值   参数必须写,不写则会报错,跟列表list有区别
print(dic)
print(dic.pop('djhs','没有此键'))  #可设置返回值

dic.popitem()  #随机删除  有返回值,返回元组形式删除的键和值
print(dic)

dic.clear()  #清空字典
print(dic)  

del dic['name']  #存在则删除,不存在则报错
print(dic)

del dic   #删除字典
print(dic)
View Code

1.3改:

dic = {'name':'lucy','sex':'woman','age':18}
dic2 = {"name":"alex","weight":75}
dic2.update(dic)  # 将dic所有的键值对覆盖添加(相同的覆盖,没有的添加)到dic2中
print(dic2) #{'weight': 75, 'sex': 'woman', 'name': 'lucy', 'age': 18}
print(dic)  #{'sex': 'woman', 'name': 'lucy', 'age': 18}
View Code

1.4查:

dic = {'name':'lucy','sex':'woman','age':18}
print(dic.keys())  #dict_keys(['name', 'sex', 'age'])
print(dic.values())  #dict_values(['lucy', 'woman', 18])
print(dic.items())   #dict_items([('name', 'lucy'), ('sex', 'woman'), ('age', 18)])

for i in dic:
    print(i)   #name age sex

for i in dic.values():
    print(i)     #woman lucy 18

for k,v in dic.items():
    print(k,v)
# age 18
# sex woman
# name lucy


v1 = dic['name1']
# print(v1)   #报错

print(dic.get('name1'))  #None 没有这个键,不会报错  所以首选get
print(dic.get('name1','没有这个键'))
View Code

1.5字典嵌套

dic = {
    'name':['张三','李四','王五'],
    'info':{
        'addr':'beijing',
        'date':'20171220'
    },
    'age':20
}
dic['age'] = 22
dic['name'].append('马七')
dic['info']['addr'] = dic['info']['addr'].upper()
print(dic)
View Code

 1.6删除下列字典中含有'k'的键对应的值

dic = {'k1':'v1','k2':'v2','a3':'v3'}

#方法一
dic1 = {} # 创建一个空的字典
for i in dic:
    if 'k' not in i:
        dic1.setdefault(i,dic[i])  #将不含‘k’的键以及对应的值添加到dic1中
dic = dic1
print(dic)

#方法二
l = []   #创建一个空的列表
for i in dic:
    if 'k' in i:
        l.append(i)  #将含有‘k’的键追加到列表l中
for i in l:   #变量列表l,每个i正好是字典中含有'k'的键,通过del删除该键及对应的值
    del dic[i]
print(dic)
View Code

二、集合

  集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希的(集合是可变的数据类型)。

集合最重要的两个特点是:

  a:去重,把一个列表变成集合,就自动去重了。

  b:关系测试,测试两组数据之间的交集、差集、并集等关系。

2.1:集合的创建。  

set1 = set({1,2,'hjm'}) # 创建方法一
set2 = {1,2,'hjm'} # 创建方法一
print(set1,set2)  # {'hjm', 1, 2} {'hjm', 1, 2}

2.2:集合的增。

set1 = {'lucy','jim','lily','hello','world'}
# add
set1.add('张三')
print(set1)

# update: 迭代着添加
set1.update('Ab') #{'lucy', 'b', 'A', 'lily', 'hello', 'world', 'jim'}
set1.update([1,2,3])  #{1, 'lily', 'lucy', 2, 3, 'jim', 'world', 'hello'}
set1.update('中国')  #{'lucy', '中', 'hello', 'world', 'lily', '国', 'jim'}
print(set1)

2.3:集合的删。

set1 = {'lucy','jim','lily','hello','world'}
#remove 删除一个指定元素
set1.remove('jim')    # {'hello', 'world', 'lucy', 'lily'}

#pop  随机删除一个元素
set1.pop()     # {'world', 'hello', 'lucy', 'lily'}

#clear  清空集合
set1.clear()    # set()

#del  删除集合
del set1
print(set1)

2.4:集合的查。

set1 = {'a','bb','ccc','f','d'}
for i in set1:
    print(i)

2.5:集合的其它操作

2.5.1交集

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
set3 = set1 & set2
print(set3)   # {4, 5}

2.5.2并集

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
set4 = set1 | set2 
print(set4)   # {1, 2, 3, 4, 5, 6, 7, 8}

2.5.3反交集

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
set5 = set1 ^ set2
print(set5)   # {1, 2, 3, 6, 7, 8}

2.5.4差集

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
set6 = set1 - set2   #set1中独有的
print(set6)   # {1, 2, 3}

2.5.5子集

set1 = {1,2,3}
set2 = {1,2,3,4,5}
set3 = {1,2,5,6}
print(set1 < set2)  # True
print(set1 < set3)  # False

2.5.6超集

set1 = {1,2,3}
set2 = {1,2,3,4,5}
set3 = {1,2,5,6}
print(set2 > set1)  # True
print(set3 > set1)  # False

2.5.7 frozenset不可变集合,让集合变成不可变类型

s = frozenset('barry')
print(s,type(s))  # frozenset({'a', 'b', 'r', 'y'}) <class 'frozenset'>

原文地址:https://www.cnblogs.com/huangjm263/p/8073778.html