字典,集合,序列

字典 dict

字典 是无序的 键:值(key:value)对集合,键必须是互不相同的(在同一个字典之内)。

序列是以连续的整数为索引,与此不同的是,字典以"关键字"为索引,关键字可以是任意不可变类型,通常用字符串或数值。
字典是 Python 唯一的一个 映射类型,字符串、元组、列表属于序列类型。

使用 hash(X),只要不报错,证明 X 可被哈希,即不可变,反过来不可被哈希,即可变。

a = 1
hash(1),hash('1'),hash(a),hash([1,2,3])
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-8-f46c3c07a214> in <module>
      1 a = 1
----> 2 hash(1),hash('1'),hash(a),hash([1,2,3])


TypeError: unhashable type: 'list'

字典创建和访问

使用dict和{}
a  = {'a':1,'b':2} 
a_1 = dict([('a',1),('b',2)])
x ,y= ['a','b'],[1,2]
a_2 = dict((x,y))
a,a_1,a_2
({'a': 1, 'b': 2}, {'a': 1, 'b': 2}, {'a': 'b', 1: 2})
a['a']
1

字典方法

dict.fromkeys(seq[, value]) 用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
x = ['xiao','da','big']
a = dict.fromkeys(x,10)
a_1 = dict.fromkeys(x)
a_2 = dict.fromkeys(x,[1,2,3])
a_3 = dict.fromkeys(x,(1,2,3))
a,a_1,a_2,a_3
({'xiao': 10, 'da': 10, 'big': 10},
 {'xiao': None, 'da': None, 'big': None},
 {'xiao': [1, 2, 3], 'da': [1, 2, 3], 'big': [1, 2, 3]},
 {'xiao': (1, 2, 3), 'da': (1, 2, 3), 'big': (1, 2, 3)})



dict.keys()返回一个可迭代对象,可以使用 list() 来转换为列表,列表为字典中的所有键。
dict.values()返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值。
类似index和values
dict.items()以列表返回可遍历的 (键, 值) 元组数组,直接迭代字典只会迭代key。
print(a_1.keys(),a_1.values())
dict_keys(['xiao', 'da', 'big']) dict_values([None, None, None])
[ i for i in a],[i for i in a.items()]
(['xiao', 'da', 'big'], [('xiao', 10), ('da', 10), ('big', 10)])



key in dict in 操作符用于判断键是否存在于字典中,如果键在字典 dict 里返回true,否则返回false。而not in操作符刚好相反,只能判断key
'xiao' in a,'small' in a 
(True, False)



dict.pop(key[,default])删除字典给定键 key 所对应的值,返回值为被删除的值。key 值必须给出。若key不存在,则返回 default 值。
del dict[key] 删除字典给定键 key 所对应的值。
类似list
dict.popitem()随机返回并删除字典中的一对键和值,如果字典已经为空,却调用了此方法,就报出KeyError异常。
dict.clear()用于删除字典内所有元素。
a = dict.fromkeys(x,10)
a.pop('big'),a,a.pop('11',20)
(10, {'xiao': 10, 'da': 10}, 20)
a = dict.fromkeys(x,10)
del a['da']
a
{'xiao': 10, 'big': 10}
a = dict.fromkeys(x,10)
a.popitem()
a
{'xiao': 10, 'da': 10}
a = dict.fromkeys(x,10)
a.clear()
a
{}



dict.update(dict2)把字典参数 dict2 的 key:value对 更新到字典 dict 里。
1,2都有的进行替代,1有2无保留
dic = {'Name': 'Lsgogroup', 'Age': 7}
dic2 = {'Sex': 'female', 'Age': 8}
dic.update(dic2)
print(dic) 
{'Name': 'Lsgogroup', 'Age': 8, 'Sex': 'female'}

train

字典的长度是多少
请修改'java' 这个key对应的value值为98
删除 c 这个key
增加一个key-value对,key值为 php, value是90
获取所有的key值,存储在列表里
获取所有的value值,存储在列表里
判断 javascript 是否在字典中
获得字典里所有value 的和
获取字典里最大的value
获取字典里最小的value
字典 dic1 = {'php': 97}, 将dic1的数据更新到dic中
dic = {
    'python': 95,
    'java': 99,
    'c': 100
    }
print(len(dic))
dic['java'] = 98;  dic
del dic['c'];  dic
3





{'python': 95, 'java': 98}
dic.keys()
dict_keys(['python', 'java'])
dic1 = {'php': 97}
dic.update(dic1)
dic
{'python': 95, 'java': 98, 'php': 97}



各门课程的考试成绩存储方式并不相同,有的用字典,有的用列表,但是分数都是字符串类型,请实现函数transfer_score(score_dict),将分数修改成int类型
data = {
        'python': {'上学期': '90', '下学期': '95'},
        'c++': ['95', '96', '97'],
        'java': [{'月考':'90', '期中考试': '94', '期末考试': '98'}]
        }
data.values()
dict_values([{'上学期': '90', '下学期': '95'}, ['95', '96', '97'], [{'月考': '90', '期中考试': '94', '期末考试': '98'}]])
[ type(i) for i in data.values()]
[dict, list, list]

集合

Python 中set与dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

集合创建

a = {}
b = {1,2,3}
type(a),type(b)
(dict, set)
# 集合可以去重
a = set('hello world')
a
{' ', 'd', 'e', 'h', 'l', 'o', 'r', 'w'}

结合方法

set.add(elmnt)用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。
a = set('hello world')
a.add('N');  a
{' ', 'N', 'd', 'e', 'h', 'l', 'o', 'r', 'w'}



set.update(set)用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。
a = set('hello')
b = set('world')
a.update(b)
a
{'d', 'e', 'h', 'l', 'o', 'r', 'w'}



set.remove(item) 用于移除集合中的指定元素。如果元素不存在,则会发生错误
set.discard(value) 用于移除指定的集合元素。remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。
a.remove('d')
a
{'e', 'h', 'l', 'o', 'r', 'w'}
a.discard('e')
a
{'h', 'l', 'o', 'r', 'w'}



set1 & set2 返回两个集合的交集。
set1 | set2 返回两个集合的并集。
set1 - set2 返回集合的差集
set1 ^ set2 返回集合的异或
set1 <= set2 判断集合是不是被其他集合包含,如果是则返回 True,否则返回 False。
a = set('hello')
b = set('world')
a&b,a|b,a-b,b-a,a^b
({'l', 'o'},
 {'d', 'e', 'h', 'l', 'o', 'r', 'w'},
 {'e', 'h'},
 {'d', 'r', 'w'},
 {'d', 'e', 'h', 'r', 'w'})
(a-b) <=a,(a-b) <=b
(True, False)

train

怎么表示只包含⼀个数字1的元组。

a = (1,)
a,type(a)
((1,), tuple)

创建一个空集合,增加 {‘x’,‘y’,‘z’} 三个元素。

a = set()
a.add('x'),a.add('y')
a
{'x', 'y'}

列表[‘A’, ‘B’, ‘A’, ‘B’]去重。

a = set(['A', 'B', 'A', 'B'])
b = list(a)
b
['A', 'B']

求两个集合{6, 7, 8},{7, 8, 9}中不重复的元素(差集指的是两个集合交集外的部分)。

a,b = {6, 7, 8},{7, 8, 9}
a^b
{6, 9}

求{‘A’, ‘B’, ‘C’}中元素在 {‘B’, ‘C’, ‘D’}中出现的次数。

a = {'A', 'B', 'C'}
b = {'B', 'C', 'D'}
[1 if  i in b else 0 for i in a]
[0, 1, 1]

序列

在 Python 中,序列类型包括字符串、列表、元组、集合和字典,这些序列支持一些通用的操作,但比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作。

str([1,2,3])
'[1, 2, 3]'
a = [1,2,3]
sorted?
a = list('hello')
b = list('world')
c = list('happy')
d = list('happiness')
list(zip(a,b,c))
[('h', 'w', 'h'),
 ('e', 'o', 'a'),
 ('l', 'r', 'p'),
 ('l', 'l', 'p'),
 ('o', 'd', 'y')]

总结

类型字符串列表元组集合字典
是否可以修改不能不能
修改命令append、extend、insertadd.dict[key]=value
是否有序有序有序有序有序无序
能否重复key不能不能
生成str,’’list,[]tuple,(),不使用()也可set,{1,2,3}{key:value},dict

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值