《零基础入门学习Python》学习过程笔记【25,26字典】

dict ['dɪkt]  
  dictionary 字典

dict对象的keys() values() items() 返回的类型都不是列表或元组类型...在使用时除了把它们强制转换为列表或元组类型,还可以直接用for in遍历得到的东西..


字典中项的顺序是任意的(系统有它自己的排列方式,这种规则我们看不懂)我们只要用键去得到值就好

1.如何创建一个字典? {}

注:字典是键值对,键和值可以为任意类型

>>> s={1:2,'a':'b',3:'c','c':4}
>>> s[1]
2
>>> s['a']
'b'
>>> s[3]
'c'
>>> s['c']
4

2.如何创建一个空字典?

>>> dict1={}

2第二种种创建字典的方式(感觉不太方便,作为了解)

>>> s=dict((('a',1),('b',2),('c',3)))   
>>> s
{'a': 1, 'b': 2, 'c': 3}
>>> s['a']
1
为什么这里dict有两个括号? 因为dict()函数的参数只有一个,这里将
(('a',1),('b',2),('c',3))
整体作为一个元组 传进来

也可以用列表的形式

>>> c=dict([['a',1],['b',2],['c',3]])
>>> c
{'a': 1, 'b': 2, 'c': 3}

3.第三种创建字典的方式

注意这里键不用加引号

>>> haha=dict(a=1,b=2,c=3)
>>> haha
{'a': 1, 'b': 2, 'c': 3}

>>> haha=dict(abc='123',bcd=789)
>>> haha
{'abc': '123', 'bcd': 789}


4.在给字典的指定键赋值时会出现什么样的问题? 如果该键已存在,则更新该键的值。如果该键不存在,则在字典中添加该键值对

>>> dict1={'a':1,'b':2,'c':3}
>>> dict1['d']=4
>>> dict1
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
>>> dict1['a']=5
>>> dict1
{'a': 5, 'b': 2, 'c': 3, 'd': 4}

5.字典类对象的方法fromkeys()的作用?为指定键(一个或多个),提供相同的值。当不提供值时,默认设置为None

注:fromkeys实际上是创建了一个新的字典


>>> dict2={}
>>> dict2.fromkeys(('a','b','c'))
{'a': None, 'b': None, 'c': None}

>>> dict3={}
>>> dict3.fromkeys(('a','b','c'),1)
{'a': 1, 'b': 1, 'c': 1}

>>> dict4={'a':1,'b':2,'c':3,'d':4}     #可见并不是更新键值,而是创建了新的字典
>>> dict4.fromkeys(('a','b'),10)
{'a': 10, 'b': 10}   

>>> dict5={}
>>> dict5.fromkeys(range(1,11),'haha')
{1: 'haha', 2: 'haha', 3: 'haha', 4: 'haha', 5: 'haha', 6: 'haha', 7: 'haha', 8: 'haha', 9: 'haha', 10: 'haha'}
>>> dict5
{}   #可见并不是更新键值,而是创建了新的字典


5.fromkeys()结合range()产生键?

>>> dict5={}
>>> dict5.fromkeys(range(1,11),'haha')
{1: 'haha', 2: 'haha', 3: 'haha', 4: 'haha', 5: 'haha', 6: 'haha', 7: 'haha', 8: 'haha', 9: 'haha', 10: 'haha'}


6.如何得到字典的所有键? dict类对象.keys()

注:键序列的类型为dict_keys类型..不是列表或者元组...但可以用强制转换成列表或元组

>>> dict1={}
>>> dict2=dict1.fromkeys(range(1,11),'hh')
>>> dict2
{1: 'hh', 2: 'hh', 3: 'hh', 4: 'hh', 5: 'hh', 6: 'hh', 7: 'hh', 8: 'hh', 9: 'hh', 10: 'hh'}

>>> dict1
{}
>>> dict2.keys()
dict_keys([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> print(dict2.keys())
dict_keys([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> type(dict2.keys())
<class 'dict_keys'>
>>> list1=list(dict2.keys())
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> tuple1=tuple(dict2.keys())
>>> tuple1
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

7.如何得到字典的所有键对应的值? dict类对象.values()
>>> dict2={1:'a',2:'b',3:'c',4:'d'}
>>> dict2.values()
dict_values(['a', 'b', 'c', 'd'])
>>> type(dict2.values())
<class 'dict_values'>

>>> list2=list(dict2.values())
>>> list2
['a', 'b', 'c', 'd']
>>> tuple2=tuple(dict2.values())
>>> tuple2
('a', 'b', 'c', 'd')

8.如何得到字典的每个项?dict对象.items()

>>> a={'a':1,'b':2,'c':3,'d':4}
>>> c=a.items()
>>> type(c)
<class 'dict_items'>
>>> print(c)
dict_items([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
>>> c=list(c)
>>> print(c)
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

9.直接访问字典中不存在的项会发生什么?会报错

>>> dict1={1:'a',2:'b',3:'c'}
>>> dict1[4]
Traceback (most recent call last):
  File "<pyshell#157>", line 1, in <module>
    dict1[4]
KeyError: 4

10.如何在访问字典中不存在的相时不报错?而是什么也不返回  dict类对象的get()方法

>>> dict1
{1: 'a', 2: 'b', 3: 'c'}
>>> dict1.get(4)  #这里什么也没返回
>>> print(dict1.get(4)) 
None  #其实返回的是None
>>> dict1
{1: 'a', 2: 'b', 3: 'c'} #该字典本身并没有改变
该方法还有一参数,这个参数会在该键不存在时被打印出来

>>> dict1
{1: 'a', 2: 'b', 3: 'c'}
>>> dict1.get(4,"没有这哥键哦!")
'没有这哥键哦!'

11.如何查看字典的键是否有一个元素? in操作符  (此方法不能用于查看值)

{1: 'a', 2: 'b', 3: 'c'}
>>> 1 in dict1
True
>>> 'a' in dict1
False

12.如何清空字典?dict类对象.clear()

>>> dict1
{1: 'a', 2: 'b', 3: 'c'}
>>> dict1.clear()
>>> dict1
{}

13.用{}和clear()容易出现错误的一个问题

>>> a={"你好":"少年"}
>>> b=a
>>> a={}
>>> b
{'你好': '少年'}
为什么b没有变成{}??因为这实际上是重新创建了一个字典,并让a的标签贴在上面。此时b还是贴在
{"你好":"少年"}上面没变
如何在将a清空时,b也随之清空?

>>> a={"牧羊少年":"A"}
>>> b=a
>>> a.clear()
>>> a
{}
>>> b
{}
因为这是对a本身进行操作的


14.如何查看一个变量(对象)的地址? 函数:id()

>>> a=1
>>> id(a)
1896765712

15.dict对象的copy()函数 

注:copy()是浅拷贝 所谓浅拷贝就是东西虽然一样,但是地址不一样  举个栗子:

>>> dict1={1:'你的名字',2:'霍尔的移动城堡'}
>>> dict2=dict1
>>> dict3=dict1.copy()
>>> dict2
{1: '你的名字', 2: '霍尔的移动城堡'}
>>> dict3
{1: '你的名字', 2: '霍尔的移动城堡'}
>>> id(dict1)
65876296
>>> id(dict2)
65876296
>>> id(dict3)
65878416

16.如何删除字典中给定键所在的键值对,并返回这个键所对应的值?   dict对象的pop()方法

>>> dict1={1:"地狱少女",2:"死亡笔记"}
>>> dict1.pop(1)
'地狱少女'
>>> dict1
{2: '死亡笔记'}
>>> dict1.pop(2)
'死亡笔记'
>>> dict1
{}

17如何随机的删除典中的一项(一对键值对),并返回这个键值对 ?     dict类对象.popitem()方法

  

>>> dict2={1:'只有花知晓',2:"鸣鸟不飞"}
>>> dict2[3]="J的故事"
>>> dict2
{1: '只有花知晓', 2: '鸣鸟不飞', 3: 'J的故事'}
>>> dict2.popitem()
(1, '只有花知晓')
>>> dict2
{2: '鸣鸟不飞', 3: 'J的故事'}
>>> dict2.popitem()
(2, '鸣鸟不飞')
>>> dict2
{3: 'J的故事'}
>>> dict2.popitem()
(3, 'J的故事')
>>> dict2
{}


18.如何在字典中添加一个键值对?dict类对象的setdefault()方法  (用这种方法还不如直接用dict[键]=值,此处只是做一个了解,为了能看懂别人写的代码)

>>> dict1={1:'神探夏洛特',2:"大侦探福尔摩斯"}
>>> dict1.setdefault(3,"花生")
'花生'
>>> dict1
{1: '神探夏洛特', 2: '大侦探福尔摩斯', 3: '花生'}

当第二个参数为空时,默认设置为None
>>> dict1
{1: '神探夏洛特', 2: '大侦探福尔摩斯', 3: '花生'}
>>> dict1.setdefault(4)
>>> dict1
{1: '神探夏洛特', 2: '大侦探福尔摩斯', 3: '花生', 4: None}

19.如何将一个字典中的键值对,添加到另一个字典用?   dict类对象的update()方法,可以理解成用一个字典去更新另一个字典

>>> dict1={1:'a',2:'b'}
>>> dict2={3:'c',4:'d'}
>>> dict1.update(dict2)
>>> dict1
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}
>>> dict2
{3: 'c', 4: 'd'}











原文地址:https://www.cnblogs.com/iamjuruo/p/7470896.html