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}
>>> 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
{}
>>> 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'}