字典、集合 、序列
一、字典
- 可变类型与不可变类型
1.序列是以连续的整数为索引,与此不同的是,字典以"关键字"为索引,关键字可以是任意不可变类型,通常用字符串或数值。
2.字典是 Python 唯一的一个 映射类型,字符串、元组、列表属于序列类型。
判断一个数据类型 X 是不是可变类型?
方法一:
麻烦方法:用 id(X) 函数,对 X 进行某种操作,比较操作前后的 id,如果不一样,则 X 不可变,如果一样,则 X 可变。
方法二:
便捷方法:用 hash(X),只要不报错,证明 X 可被哈希,即不可变,反过来不可被哈希,即可变。
i=1
print(id(i))
i=i+1
print(id(i))
li=[1,2,3]
print(id(li))
li.append(4)
print(li,id(li))
#140718338217632
#140718338217664 id改变了,所以整数是不可变类型
#1699756988288
#[1, 2, 3, 4] 1699756988288 id没有改变,所以列表是可变类型
print(hash('python'))#2290148981900890248
print(hash((1,2,3,4)))#590899387183067792
print(hash([4,5,6,7]))#TypeError: unhashable type: 'list'
print(hash({
4,5,6,7}))#print(hash({4,5,6,7}))
总结:
数值、字符和元组 都能被哈希,因此它们是不可变类型。
列表、集合、字典不能被哈希,因此它是可变类型。
-字典的定义
字典 是无序的 键:值(key:value)对集合,键必须是互不相同的(在同一个字典之内)。
字典 定义语法为 {元素1, 元素2, …, 元素n}
1.其中每一个元素是一个「键值对」-- 键:值 (key:value)
2.关键点是「大括号 {}」,「逗号 ,」和「冒号 :」
3.大括号 – 把所有元素绑在一起
4.逗号 – 将每个键值对分开
5.冒号 – 将键和值分开
number=['1','2','3']
character=['haohao','xiaoxaio','heiehei']
print('2:',character[number.index('2')])
#2: xiaoxaio
dic={
'1':'haohao','2':'xiaoxaio','3':'heihei'}
print('2:',dic['2'])
#2: xiaoxaio
例:通过字符串或数值作为key来创建字典。
dic1 = {
1: 'one', 2: 'two', 3: 'three'}
print(dic1) # {1: 'one', 2: 'two', 3: 'three'}
print(dic1[1]) # one
print(dic1[4]) # KeyError: 4
- 通过构造函数dict来创建字典。
1.dict() 创建一个空的字典。
通过key直接把数据放入字典中,但一个key只能对应一个value,多次对一个key放入 value,后面的值会把前面的值冲掉。
dic=dict()
dic['one']=1
dic['two']=2
dic['three']=3
print(dic)
#{'one': 1, 'two': 2, 'three': 3}
2.通过(key,value)初始化新字典
dic1 = dict([('one', 1), ('two', 2), ('three', 3)])
print(dic1) #{'one': 1, 'two': 2, 'three': 3}
dic2 = dict((('one', 1), ('two', 2), ('three', 3)))
print(dic2) #{'one': 1, 'two': 2, 'three': 3}
3.For example: dict(one=1, two=2)
<注>这种情况下,键只能为字符串类型,并且创建的字符串不能加上引号,加上会报错。
dic=dict(name='haha',grade='2')
print(dic)
#{'name': 'haha', 'grade': '2'}
字典的内置方法
- dict.fromkeys(seq[, value]) 用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
seq=('nianji','banji','zuoweihao')
dic=dict.fromkeys(seq)
print(dic)
#{'nianji': None, 'banji': None, 'zuoweihao': None}
seq=('nianji','banji','zuoweihao')
dic=dict.fromkeys(seq,2)
print(dic)
#{'nianji': 2, 'banji': 2, 'zuoweihao': 2}
{
<