python--step-04

字典

  • 列表以外Python中使用最灵活的内置数据类型。
  • 是一种可变的数据类型。
  • 和列表的区别:
    • 列表有序,字典无序
    • 列表通过索引(偏移)访问元素,字典通过键(key)访问元素

字典的基本格式:

dic = {key1:value1,key2:value2,...,keyn:valuen}

值可以取任意数据类型,但键不可以,必须为不可变类型,即key必须可哈希。

可哈希—>不可变

哈希—>可变

特点:

  • key:value ,键值对之间用冒号(:)连接
  • key:value组成字典的一个元素
  • 键值对之间用逗号(,)隔开
  • 整个字典用花括号{}包裹

字典的创建

  • 空字典的创建
 dic = {}
 print(type(dic))
 # <class 'dict'>
  • 创建多元字典
 info = {"id":2019011,"name":"Tom","age":18}
 print(info)
 print(len(info))
 print(info["id"])
 # {'id': 2019011, 'name': 'Tom', 'age': 18}
 # 3
 # 2019011
 
 key1,key2,key3 = "id","name", "age"
 value1,value2,value3 = 20190101,"Tom",18
 dic = {key1:value1,key2:value2,key3:value3}
 print(dic)
 # {'id': 20190101, 'name': 'Tom', 'age': 18}
  • 强转
dic = dict(id=20190101,name="Tom",age=18)
print(dic)
# {'id': 20190101, 'name': 'Tom', 'age': 18}

zip()
key = ("id","name","age")
value = (20190101,"Tom",18)
tp = list(zip(key,value))
print(tp,type(tp))
# [('id', 20190101), ('name', 'Tom'), ('age', 18)] <class 'list'>

print(dict((('id',20190101),('name','Tom'),('age',18))))
#{'id': 20190101, 'name': 'Tom', 'age': 18}
  • 通过字典的fromkeys方法创建字典
    格式:
dict.fromkeys(seq,val=None)
  • 创建并返回一个字典
    • 以seq中的元素作为该字典的键
    • val的值作为该字典中所有键对应的初始值;如不提供,默认为None。
dic = dict.fromkeys(["Tom","jack","lucy"],66666)
print(dic)
# {'Tom': 66666, 'jack': 66666, 'lucy': 66666}

字典的常见操作

(1)增
  • 直接添加键值对(dic[key] = value)
  • 直接使用变量名[“键”] = “值”。
    • 如果key不存在,新建键值对(key:value)
    • 如果存在,则更新值(value)
dic = {}
dic["id"] = 20190101
dic["name"] = "Ton"
dic["age"] = 19
print(dic)
# {'id': 20190101, 'name': 'Ton', 'age': 19}

li = []
tp = input("是否添加一个字典:")
while tp == "是" :
    dic = {}
    id = int(input("id = "))
    name = input(" name =")
    age = int(input("age ="))
    dic["id"] = id
    dic["name"] = name
    dic["age"] = age
    li.append(dic)
    tp = input("是否添加一个字典:")
    print("新添加的字典为:",dic)
else :
    print("总字典为:",li)
    是否添加一个字典:是
# id = 1001
#  name =pluto
# age =18
# 是否添加一个字典:是
# 新添加的字典为: {'id': 1001, 'name': 'pluto', 'age': 18}
# id = 1002
#  name =charon
# age =19
# 是否添加一个字典:是
# 新添加的字典为: {'id': 1002, 'name': 'charon', 'age': 19}
# id = 1003
#  name =love
# age =999
# 是否添加一个字典:否
# 新添加的字典为: {'id': 1003, 'name': 'love', 'age': 999}
# 总字典为: [{'id': 1001, 'name': 'pluto', 'age': 18}, {'id': 1002, 'name': 'charon', 'age': 19}, {'id': 1003, 'name': 'love', 'age': 999}]
  • dict.update(dic)

    把字典dic中的键值对(key:value)更新到dict中。

    • 两个字典的键完全不同,则将dic的键值对全部添加至dictc中
    • 存在相同的键,则更新dict中对应的值
dic = {"job":"IT","hobby":"Read"}
dic2 = {"name":"jack","hobby":"read"}
dict = {"id":20190101,"name":"Tom","age":22}
dict.update(dic2)
print(dict)
#  {'id': 20190101, 'name': 'jack', 'age': 22, 'hobby': 'read'}
(2)删
  • dict.pop
    • 格式:dict.pop(key[,default])
      • 如果key存在于dict中,删除并返回dict[key]
      • 如果不存在,给出默认值则返回默认值,未给出默认值,报错
dict = {"id":20190101,"name":"Tom","age":22}
print(dict.pop("job","IT"))
print(dict)
print(dict.pop("age",23))
print(dict)
# IT
# {'id': 20190101, 'name': 'Tom', 'age': 22}
# 22
# {'id': 20190101, 'name': 'Tom'}
  • dict.popitem()
    • 随即删除一对键值对
    • 有返回值的,元组
dict = {"id":20190101,"name":"Tom","age":22}
print(dict.popitem())
key,value = dict.popitem()
print(dict)
print(key,value)
#  ('age', 22)
#  {'id': 20190101}
#  name Tom
  • del.dict[key],删除指定元素
  • del.dict, 删除字典
dict = {"id":20190101,"name":"Tom","age":22}
del dict["age"]
print(dict)
# {'id': 20190101, 'name': 'Tom'}
  • clear(),清空元素
dict = {"id":20190101,"name":"Tom","age":22}
print(dict.clear())
print(dict)
# None
# {}
(3)改
  • 直接修改
dic = {"id":20190101,"name":"Tom","age":22}
dic["id"] = 20190210
print(dic)
# {'id': 20190210, 'name': 'Tom', 'age': 22}
  • dict.setdefault()
    • 键存在,不改动,返回字典中的值
    • 不存在,在字典中添加相应的键值对,并返回对应的值
dic = {"id":20190101,"name":"Tom","age":22}
print(dic.setdefault("name","Jack")) # 键存在,以原字典为主,不添加
print(dic.setdefault("Job","IT")) # 键不存在,添加
print(dic)	
# Tom
# IT
# {'id': 20190101, 'name': 'Tom', 'age': 22, 'Job': 'IT'}
(4)查

字典值的访问

  • 直接通过字典的key访问value
dic = {"id":20190101,"name":"Tom","age":22}
print(dic["id"]) # 存在,返回对应的值
print(dic["Job"]) #不存在,直接报错
  • dict.get()访问value
    • 语法格式 dict.get(key[,default])
    • 不确定字典中是否存在某个键而又想对其进行操作,比如获取值—>get 方法
    • 当key不存在的时候,不会抛出异常,返回None
dic = {"id":20190101,"name":"Tom","age":22}
print(dic.get("id",20190201))
print(dic.get("salary",12000))  # 不存在,返回输入值
print(dic.get("Job")) # 不存在,返回None
print(dic)
# 20190101
# 12000
# None
# {'id': 20190101, 'name': 'Tom', 'age': 22}
  • 遍历
    • dict.keys(),返回键
    • dict.values(),返回值
    • dict.items(),返回键值对
dic = {"id":20190101,"name":"Tom","age":22}
print(dic.keys(),type(dic.keys()))
print(dic.values(),type(dic.values()))
print(dic.items(),type(dic.items()))
for key in dic.keys():
    print(key,end=" ")
for value in dic.values():
    print(value,end=" ")
for item in dic.items():
    print(item,end=" ")
for key,value in dic.items():
    print(key,":",value)
# dict_keys(['id', 'name', 'age']) <class 'dict_keys'>
# dict_values([20190101, 'Tom', 22]) <class 'dict_values'>
# dict_items([('id', 20190101), ('name', 'Tom'), ('age', 22)]) <class 'dict_items'>
# id name age 20190101 Tom 22 ('id', 20190101) ('name', 'Tom') ('age', 22) id : 20190101
# name : Tom
# age : 22
li = [23,34,45,56,22,67,78,89,90,99,66,45]
dic = {}
li1 = []
li2 = []
for i in range(len(li)):
    if  li[i] < 60 :
        li1.append(li[i])
    else:
        li2.append(li[i])
dic[">=60"] = li2
dic["<=60"] = li1
print(dic)
#  {'>=60': [67, 78, 89, 90, 99, 66], '<=60': [23, 34, 45, 56, 22, 45]}

集合

特点:
  • 无序

  • 不可重复

  • 不可更改

    • 内部元素是可哈希的
    • 集合本身是不可哈希的
  • 用{}括起来的单元素数据集

用途
  • 去重(列表—>集合,自动去重)
  • 关系测试
集合的创建
空集合的创建
>>> st = set()
>>> type(st)
<class 'set'>
多元的集合创建
>>> st = {1,2,3,"abc","def"}
>>> type(st)
<class 'set'>
>>> st = {1,2,3,"abc","def",["a","b"]}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>>
强转
>>> li = ["city","college","zhejiang"]
>>> st = set(li)
>>> st,type(st)
({'college', 'city', 'zhejiang'}, <class 'set'>)
>>>
>>> sr = "city"
>>> st = set(sr)
>>> st
{'t', 'y', 'i', 'c'}
>>>
>>> sr = "hello"
>>> st = set(sr)
>>> st
{'e', 'o', 'l', 'h'}
>>>
>>> dic = {"id":20190101,"name":"Tom","age":18}
>>> st = set(dic)
>>> st
{'id', 'name', 'age'}
>>> li = list(dic)
>>> li
['id', 'name', 'age']
>>>
集合的基本操作
(1)增
  • set.add()
  • set.update()
(2)删
  • set.pop(),删除排序最小的一个元素
  • set.discard(),移除元素,不存在,不会报错
  • set.remove(),移除元素,不存在,报错
  • del set
>>> st = {"a","b","ab","c"}
>>> st.pop()
'ab'
>>> st = {"a","b","ab","c",1}
>>> st.pop()
1
>>> st.discard("ab")
>>> st
{'b', 'a', 'c'}
>>> st = {"a","b","ab","c"}
>>> st.discard("d")
>>> st
{'ab', 'b', 'c', 'a'}
>>>
>>> st.remove("d")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'd'
>>>
>>> del st
>>> st
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'st' is not defined
>>>
(3)改
  • 不可更改
(4)查
  • 不可查的
(5)遍历
st = {"city","college","zhejiang"}
for i in st :
    print(i,end=" ")
# college zhejiang city 

st = {"city","college","zhejiang"}
for i in enumerate(st):
    print(i)
# (0, 'zhejiang')
# (1, 'college')
# (2, 'city')
集合的基本运算
(1)子集
  • <
  • set.issubset()
>>> a = set("abcd")
>>> b = set("cdef")
>>> c = set("ab")
>>> a,b,c
({'d', 'b', 'c', 'a'}, {'f', 'e', 'd', 'c'}, {'b', 'a'})
>>>
>>> c<a
True
>>> c.issubset(a)
True
>>> c<b
False
(2)交集
  • “&”
  • set.intersection()
>>> a = set("abcd")
>>> b = set("cdef")
>>> c = set("ab")
>>> a & b
{'d', 'c'}
>>> a.intersection(b)
{'d', 'c'}
(3)并集
  • “|”
  • set.union()
>>> a = set("abcd")
>>> b = set("cdef")
>>> a | b
{'b', 'a', 'd', 'f', 'e', 'c'}
>>> a.union(b)
{'b', 'a', 'd', 'f', 'e', 'c'}
(4)差集
  • “-”
  • set.difference()
>>> a = set("abcd")
>>> b = set("cdef")
>>> a - b
{'b', 'a'}
>>> a.difference(b)
{'b', 'a'}
>>>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值