Python学习小记(四)Python数据类型④字典

Python学习小记(四)Python数据类型④字典,第1张

目前为止,字典(dict)是Python唯一内建的映射方式的数据类型。


从Python3.6开始,字典元素的存储顺序由各键值存储时的顺序而定(但依然不支持索引取值)。


 字典是无序、可变的。


1、字典的创建

我们通过一对“{}”来创建字典,字典内的每个元素的键和值是通过“:”来分隔的,也就是key:value格式。


字典中的键可以为任意不可变的数据类型(故列表不可以当字典的key),而value则不限制类型。


①使用“=”将一个字典赋值给一个变量

>>>a_dict={'a':1,'b':2,'c':3}
>>>a_dict
{'a': 1, 'b': 2, 'c': 3}

②使用dict函数来创建字典

>>>keys=['a','b','c','d']
>>>values=[1,2,3,4]
>>>dictionary=dict(zip(keys,values))
>>>dictionary
{'a': 1, 'b': 2, 'c': 3, 'd': 4}

③以给定内容为键,创建值为空的字典

>>>adict=dict.fromkeys(['apple','orange'])
>>>adict
{'apple': None, 'orange': None}
#以列表作为字典的键时报错
>>>a_dict={['a']:1,'b':2,'c':3}
Traceback (most recent call last):
  File "D:\python3102\lib\code.py", line 90, in runcode
    exec(code, self.locals)
  File "", line 1, in 
TypeError: unhashable type: 'list'

2、字典的添加和修改

①通过字典的key修改对应的value。


用这个方法时,如果键存在,则可以修改该键的值;如果键不存在,则在字典中添加该键值对,但是列表就不能这么添加元素。


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


#列表 因为列表还没有初始化,这个时候索引为3这个位置不存在。


>>>list1=[] >>>list[3]=3 Traceback (most recent call last): File "D:\python3102\lib\code.py", line 90, in runcode exec(code, self.locals) File "", line 1, in TypeError: 'type' object does not support item assignment

②使用字典对象的update()方法将另一个字典的键值对添加到当前字典对象。


若两个字典中存在相同的键,那么使用该方法后,这个键对应的值以另一个字典(非当前)字典的值为准。


(dict不支持“+”的合并方法)

>>>adict={'a':1,'b':2,'c':3}
>>>bdict={'c':4,'d':5}
>>>adict.update(bdict)
>>>adict
{'a': 1, 'b': 2, 'c': 4, 'd': 5}
>>>adict+bdict
Traceback (most recent call last):
  File "D:\python3102\lib\code.py", line 90, in runcode
    exec(code, self.locals)
  File "", line 1, in 
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'

3、字典元素的读取

①遍历时字典默认返回字典的键key

>>>dict1={'a':1,'b':2,'c':3}
>>>for i in dict1:
...    print(i)
...    
a
b
c

②使用字典对象的keys()方法可以返回字典的键

>>>dict1={'a':1,'b':2,'c':3}
>>>for k in dict1.keys():
...    print(k)
...    
a
b
c

③使用字典对象的values()方法可以返回字典的值

>>>dict1={'a':1,'b':2,'c':3}
>>>for v in dict1.values():
...    print(v)
...    
1
2
3

④以键为下标读取字典元素的值,若键不存在则抛出异常。


>>>aDict={'name':'Dong','sex':'male','age':37}
>>>aDict['name']
'Dong'
>>>aDict['tel']
Traceback (most recent call last):
  File "D:\python3102\lib\code.py", line 90, in runcode
    exec(code, self.locals)
  File "", line 1, in 
KeyError: 'tel'

⑤使用字典的get方法获取指定键对应的值,如果键不存在则默认返回None(可以指定为其他值)

>>>dict1={'a':1,'b':2,'c':3}
>>>dict1.get('a')
1
>>>print(dict1.get('d'))
None
>>>print(dict1.get('d','There is no d'))
There is no d
>>>dict1
{'a': 1, 'b': 2, 'c': 3}

⑥使用字典的setdefault方法获取字典的值,如果键不存在,则添加该键到字典中,并设置默认值None

>>>dict1={'a':1,'b':2,'c':3}
>>>dict1.setdefault('d')
>>>dict1
{'a': 1, 'b': 2, 'c': 3, 'd': None}
>>>dict1.setdefault('a')
1

⑦使用字典对象的items()方法可以返回字典的键值对

>>>dict1={'a':1,'b':2,'c':3}
>>>for item in dict1.items():
...    print(item)
...    
('a', 1)
('b', 2)
('c', 3)
#序列解包用法
>>>for key,value in dict1.items():
...    print(key,value)
...    
a 1
b 2
c 3

4、字典的删除:

①用del方法删除字典中指定键的元素或删除整个字典

>>>dict1={'a':1,'b':2,'c':3}
>>>del dict1['a']
>>>dict1
{'b': 2, 'c': 3}
>>>del dict1
>>>dict1
Traceback (most recent call last):
  File "D:\python3102\lib\code.py", line 90, in runcode
    exec(code, self.locals)
  File "", line 1, in 
NameError: name 'dict1' is not defined. Did you mean: 'adict'?

②使用字典对象的pop()方法来删除字典中指定键的元素,返回对应的值;如果键不存在则报错

>>>dict1={'a':1,'b':2,'c':3}
>>>dict1.pop('a')
1
>>>dict1
{'b': 2, 'c': 3}
>>>dict1.pop('d')
Traceback (most recent call last):
  File "D:\python3102\lib\code.py", line 90, in runcode
    exec(code, self.locals)
  File "", line 1, in 
KeyError: 'd'

③使用字典对象的popitem()方法随机删除并返回字典中的一个元素

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

④使用字典对象的clear()方法来删除字典中所有元素

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

5、字典对象的__contains__方法:和成员运算符作用一样,判断键是否存在字典中

>>>dict1={'a':1,'b':2,'c':3}
>>>dict1.__contains__("a")
True
>>>dict1.__contains__("d")
False

6、总结

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/569730.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存