字典:
元组,列表,字符串是序列类型!
字典是映射类型!
字典的标志性符号是大括号,字典由多个键及其对应的值共同构成,每一对键值组合称为一项。访问字典只需访问键值即可。
在字典中,为一个不存在的key值赋值会怎样?– 会自动创建对应的键(key)并添加相应的值(value)进去。
Python 对键和值有没有类型限制? – Python 对键的要求相对要严格一些, 要求它们必须是可哈希(Hash)的对象,不能是可变类型(包括变量,列表,字典本身等),但是Python对值是没有任何限制的。附上字典的存储原理你知道Python的字典是如何存储的吗?
有三种创建字典的方法:
ditc1 = {1:'one', 2:'two', 3:'three'}
说明:1称为键值(key),后面是与键值相对应的值。dict2 = dict((('F',70),('i',105),('s',115)))
说明:使用dict()以元组的形式创建字典时,它里面只有一个变量 dict(mapping),所以我们将各个元组以一个括号括起来作为一个变量,这样看起来就有很多层括号啦~dict3 = dict(小仙女='我自己',大帅哥='你猜呢')
说明:这是以关键字参数创建字典。
访问字典的几种方法:
- keys, values, items 一般用在 for 循环中:
for eachkey in dict1.keys():
for eachvalue in dict1.valuess():
for iTem in dict1.items():
分别打印的是每一项的键值,值,以及整个项。
字典的各种内置方法
- fromkeys : fromkeys方法是直接创建一个新的字典,不要试图用它来修改一个原有的字典,因为它会无情的把原来的字典直接覆盖掉。
(1)dict1 = {}
a =dict1.fromkeys((1,2,3),'number')
print(a)
-->{1: 'number', 2: 'number', 3: 'number'}
(2)dict1 = {}
a =dict1.fromkeys((1,2,3),('one','two','three'))
print(a)
-->{1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')
不会智能对应分配,而是给每一个都是赋值一样的。因为只有一个参数。并且不能批量的改变key对应的值,使用它是重新建立了一个字典覆盖掉原来的字典。
2.get :如果我们在字典中索引一个不存在的键,Python会报错,现在我们使用get,它是一种更宽松的方式去访问字典。
现在我们访问一个不存在的键。
dict1.get(32)
print(dict1.get(32))
None
如果你想要当访问的值不存在时返回一个具体的值,可以自己设定。
dict1.get(32,'没有')
'没有'
但是当它是有值时,还会返回原有的值。
dict1.get(31,'没有')
赞
3 . clear : 当我们想要清空一个字典时,我们使用clear方法。dict1.clear()
4 . copy : 拷贝一个字典。
5 . pop,popitem : pop是给定键弹出对应的值,而popitem是弹出一个项,注意,这个项并不一定是第一项,而是随机的。因为在字典里是没有顺序的。它是按照某种优先级排列的。
6 .setdefault : setdefoult 方法和 get 方法有点类似, 区别是如果 setdefault 找不到对应的键时会自动添加。
a = {3:'three', 4:'four'}
a.setdefault('小仙女')
print(a)
{'小仙女':None, 3:'three', 4:'four'}
我们也可以给一个值进去。
a.setdefault(5,'five')
{'小仙女':None, 3:'three', 4:'four', 5:'five'}
7 . update : update是利用一个映射关系或一个字典去更新一个字典。
b = {'小仙女':'我'}
a.update(b)
{'小仙女':'我', 3:'three', 4:'four', 5:'five'}
集合:你就是唯一
- 如何创建一个集合
1.将一堆元素用花括号括起来。
2.使用set()工厂函数。set中可传递序列(列表,字符串,元组)。
set1 = set([1,2,3,4,5,5])
{1,2,3,4,5}
set 处理过后是无序的!
如果希望创建的函数是不变的,请使用 frozenset().
集合几乎所有的作用就是确保里边包含的元素的唯一性,集合内不可能存在两个相同的元素!!
num2 = {1,2,3,4,5,5,4,3,2}
num2 = {1,2,3,4,5}
- 集合是无序的,不要试图去索引某个值,会报错
>>> num_set = set([1, 2, 3, 4, 5])
>>> num_set[0]
>会报错
如何确定一个集合里有多少元素? 用len()!
请问 set1 = {[1,2]} 和 set1 = set([1,2]) 结果一样吗?
不一样!!前者会报错!!后者是一个集合。
>>> set1 = {[1, 2]}
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
set1 = {[1, 2]}
TypeError: unhashable type: 'list'
从报错信息上我们可以看到,‘列表不是可哈希的类型’,没错,列表是可变的,怎么可以是可哈希的呢~~等等,我们忽然想起来字典的存储方式也是哈希的呀!!
再想一想觉得很有道理呀!利用哈希函数计算,相同的元素得到的哈希值(存放地址)是相同的,所以在集合中所有相同的元素都会覆盖掉,因此有了集合的唯一性。
接着想就更有道理啦,通过哈希函数计算出的地址不可能是按顺序排放的,所以集合才强调是无序的!!!
举两个集合的内置方法。add 和 remove
>>> num1.add(6)
>>> num1
{0, 1, 2, 3, 4, 5, 6}
>>> num1.remove(6)
>>> num1
{0, 1, 2, 3, 4, 5}
还有更多详细的内置方法请看链接集合类型内置方法总结
再次要特别感谢小甲鱼老师,看着他的教程,通俗易懂。