目录
2.get(key,default) 根据键找到值,没有指定的键时不报错:
3.setdefault()根据键找到值,如果有这个键就返回值,如果没有就返回default参数,并添加新的键值对。
字典
1:字典是Python当中唯一实现映射关系的数据类型,元素以键和值的方式存储。
映射关系:表示字典中键都能找到唯一的值与之对应。
2:字典是一种无序的可变的序列,可以对键进行迭代访问。
可变的:字典可以对值进行嵌套,值可以是列表或者字典。
3.字典的格式:
dictname = {'key':'value1', 'key2':'value2', ..., 'keyn':valuen}
dictname 表示变量名 key表示键,value表示值。
4.字典的键是不可变的唯一的,只能用数字,字符串和元组来表示。
创建字典
1.使用{}和:直接创建
>>> #键为列表时报错
>>> dict1 = {[20, 30]: 'great', 30: [1,2,3]}
Traceback (most recent call last):
File "<pyshell#149>", line 1, in <module>
dict1 = {[20, 30]: 'great', 30: [1,2,3]}
TypeError: unhashable type: 'list'
>>> #键可以为元组,数字和字符串
>>> dict1 = {(20, 30): 'great', 30: [1,2,3],'dog':100}
>>> dict1
{(20, 30): 'great', 30: [1, 2, 3], 'dog': 100}
2.使用dict()函数创建
表格来自C语言中文网
2.1a = dict(str1=value1, str2=value2, str3=value3)
str 表示字符串类型的键,value 表示键对应的值。
注意:使用此方式创建字典时,字符串不能带引号。
>>> x={"语文":73,"数学":75}
>>> b=dict({"语文":73,"数学":75},英语=75)
2.2
#方式1
demo = [('two',2), ('one',1), ('three',3)]
#方式2
demo = [['two',2], ['one',1], ['three',3]]
#方式3
demo = (('two',2), ('one',1), ('three',3))
#方式4
demo = (['two',2], ['one',1], ['three',3])
a = dict(demo)
向 dict() 函数传入列表或元组,而它们中的元素又各自是包含 2 个元素的列表或元组,其中第一个元素作为键,第二个元素作为值。
以方式一为例:
>>> z=dict([("语文",73),("数学",75)])
2.3
keys = ['one', 'two', 'three'] #还可以是字符串或元组
values = [1, 2, 3] #还可以是字符串或元组
a = dict( zip(keys, values) )
通过应用 dict() 函数和 zip() 函数,可将前两个列表转换为对应的字典。
>>> c=dict(zip(["语文","数学","英语"],[73,75,75]))
3.使用fromkeys()函数,创建值相同的字典
格式:dictname = dict.fromkeys(seq[,value=None)
dictname表示变量名,seq[表示键的列表(可以用字符串,列表,元组),value表示值。
>>> d=dict.fromkeys("Fish",250)
>>> d
{'F': 250, 'i': 250, 's': 250, 'h': 250}
注意:fromkeys()函数不负责保存。
>>> dict1={}
>>> dict1.fromkeys(['f','i','s','h'],250)
{'f': 250, 'i': 250, 's': 250, 'h': 250}
>>> dict1
{}
键具有唯一性:由两个f,,但是只有一个”f“键。
>>> d=dict.fromkeys("Fffish",250)
>>> d
{'F': 250, 'f': 250, 'i': 250, 's': 250, 'h': 250}
增加字典元素
>>> x={"语文":73,"数学":75}
>>> x["英语"]=75
>>> x
{'语文': 73, '数学': 75, '英语': 75}
删除字典元素,删除字典
1.pop(key,default)
>>> d
{'F': 250, 'f': 100, 'i': 250, 's': 250, 'h': 250}
>>> #使用pop()方法
>>> d.pop(h)#查找的键不存在时,报错
Traceback (most recent call last):
File "<pyshell#41>", line 1, in <module>
d.pop(h)
NameError: name 'h' is not defined
>>> d.pop('h')
250
>>> d
{'F': 250, 'f': 100, 'i': 250, 's': 250}
>>> #pop(key,default)#设置default,避免报错。
>>> d.pop(h,"无")
2.popitem()
python新版本会删除字典中最后一个元素。python旧版本随机删除一个元素。
>>> d
{'F': 250, 'f': 100, 'i': 250, 's': 250}
>>> d.popitem()
('s', 250)
>>> d
{'F': 250, 'f': 100, 'i': 250}
3.del
del删除整个字典:
>>> d
{'F': 250, 'f': 100, 'i': 250, 's': 250}
>>> #del
>>> del d
>>> d
Traceback (most recent call last):
File "<pyshell#54>", line 1, in <module>
d
NameError: name 'd' is not defined
del删除字典中某个的元素:
>>> d
{'F': 250, 'f': 100, 'i': 250}
>>> del d['f']
>>> d
{'F': 250, 'i': 250}
del的切片语法不可用:
>>> d={'F': 250, 'f': 100, 'i': 250}
>>> del d[0:2]
Traceback (most recent call last):
File "<pyshell#161>", line 1, in <module>
del d[0:2]
TypeError: unhashable type: 'slice'
3.clear()
清空字典的元素:
>>> b=dict({"语文":73,"数学":75})
>>> b.clear()
>>> b
{}
修改字典元素:
1.修改单个字典元素:
>>> c=dict(zip(["语文","数学","英语"],[73,75,75]))
>>> c["英语"]=80
>>> c
{'语文': 73, '数学': 75, '英语': 80}
2.修改对各字典元素:update()
>>> c=dict(zip(["语文","数学","英语"],[73,75,75]))
>>> #update()修改多个
>>> c.update({"语文":100,"数学":90})
>>> c
{'语文': 100, '数学': 90, '英语': 80}
查找字典元素:
1.根据键找到值,没有指定的键时报错:
>>> c=dict(zip(["语文","数学","英语"],[73,75,75]))
>>> c['英语']
75
>>> c['英']
Traceback (most recent call last):
File "<pyshell#75>", line 1, in <module>
c['英']
KeyError: '英'
2.get(key,default) 根据键找到值,没有指定的键时不报错:
>>> c
{'语文': 90, '数学': 90, '英语': 75}
>>> #get(key,default)
>>> c.get('英',"没有")
'没有'
3.setdefault()根据键找到值,如果有这个键就返回值,如果没有就返回default参数,并添加新的键值对。
>>> c
{'语文': 90, '数学': 90, '英语': 75}
>>> #setdefault()
>>> c.setdefault('英语',"100")
75
>>> c.setdefault('物理',"100")
'100'
>>> c
{'语文': 90, '数学': 90, '英语': 75, '物理': '100'}
获取字典的键,值,键值对
items() keys() values()
items() keys() values()是字典的视图对象,分别获取键值对,键和值
>>> c
{'语文': 90, '数学': 90, '英语': 75, '物理': '100'}
>>> #items() keys() values()获取键值对,键和值
>>> key=c.keys()
>>> key
dict_keys(['语文', '数学', '英语', '物理'])
>>> value=c.values()
>>> value
dict_values([90, 90, 75, '100'])
>>> item=c.items()
>>> item
dict_items([('语文', 90), ('数学', 90), ('英语', 75), ('物理', '100')])
当字典内容发生改变时,视图对象的内容也相应地改变。
>>> c.pop('数学')
90
>>> c
{'语文': 90, '英语': 75, '物理': '100'}
>>> item
dict_items([('语文', 90), ('英语', 75), ('物理', '100')])
>>> key
dict_keys(['语文', '英语', '物理'])
>>> value
dict_values([90, 75, '100'])
浅拷贝:
>>> c
{'语文': 90, '英语': 75, '物理': '100'}
>>> #浅拷贝
>>> #copy()
>>> e=c.copy()
>>> e
{'语文': 90, '英语': 75, '物理': '100'}
字典的嵌套:
>> #字典的嵌套
>>> #创建
>>> d={'成绩':{'语文': 90, '英语': 75, '物理': '100'}}
>>> d['成绩']['物理']
'100'
>>> #嵌套字典,嵌套序列
>>> d={'成绩':['语文', 90, '英语'], 75:['物理', '100']}
SyntaxError: invalid character in identifier
>>> d={'成绩':['语文', 90, '英语'], 75:['物理', '100']}
>>> d[75][0]
'物理'
字典推导式:
规则和列表推导式一样。可以查看Python学习笔记(1) http://t.csdn.cn/PCIQa
>>> #字典推导式
>>> m={'a':10,'b':90,'c':100,'d':60}
>>> n={v:k for k,v in m.items()}
>>> n
{10: 'a', 90: 'b', 100: 'c', 60: 'd'}
>>> n={v:k for k,v in m.items()if v<80}
>>> n
{10: 'a', 60: 'd'}
>>> #多层for循环
>>> d={x:y for x in [1,3,5] for y in [6,8,10]}
>>> d
{1: 10, 3: 10, 5: 10}
>>> #键x对应的y一直在更新,所以每个键的值都是10.