老男孩Python学习之数据类型 字典

以下是老男孩教育编写的Python教学资料,转载请注明出处:http://www.oldboyedu.com


字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。

字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

注意: python3.6 之后字典更新为有序

一. 定义字典

字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中, 格式如下所示:

d = { 'name' : 'shaowei','age':18 }

键必须是唯一的,但值则不必。 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。 一个简单的字典实例:

dict1 = {'Alex': '2341', 'Eva_j': '9102', 'Qimi': '3258'}

也可如此创建字典:

dict1 = {'name':'guobaoyuan'}
dict2 = {'age': 18}

二. 字典的增删改查

增加

在原有的字典中进行键值对增加

dict1 = {'user':'alex','password':'alex3714'}
dict1['id'] = 4
print(dict1)
运行结果:
{'user': 'alex', 'password': 'alex3714', 'id': 4}

删除

能删单一的元素也能清空字典,清空只需一项操作。 显示删除一个字典用del命令,如下实例:

1)del
dict1 = {'user':'alex','password':'alex3714'}
del dict1['user'];                   #删除键是'user'的条目
del dict1 ;                          #删除词典
2)clear()
dict1 = {'user':'alex','password':'alex3714'}
dict1.clear();                      #清空词典所有条目

修改

向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:

dict1 = {'user':'alex','password':'alex3714'}
dict1['user'] = 'wusir'  # 这是对现有的字段进行修改
print(dict1['user'])     # 获取到的内容就是wusir
print(dict1)
# 获取到的就是{'user':'alex','password':'alex3714','School':"DPS School"}

查找

方式一:直接按key查找

如果字典中key不存在会报错

扫描二维码关注公众号,回复: 982235 查看本文章
dict1 = {'user':'alex','password':'alex3714'}
print(dict1['user'])
print(dict1['password'])
print(dict1['age'])                     #如果字典中没有age键,会报错
运行结果:
alex
alex3714
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'name'
方式二:get查找

如果字典中没有此key,不会报错

dict1 = {'user':'alex','password':'alex3714'}
print(dict1..get('user'))
print(dict1.get('password'))
print(dict1['age'])                     #如果字典中没有age键,会取None
运行结果:
alex
alex3714
None

三. 字典键的特性

字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。

两个重要的点需要记住:

1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,就会默认使用最后定义的这个键值对,如下实例:

dict1 = {'user':'alex','password':'alex3714','user':'egon'}
dict1['user']
运行结果:
'egon'

2)键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行,如下实例:

dict = {['Name']: 'guobaoyuan', 'Age': 7};
print "dict['Name']: ", dict['Name'];
以上实例输出结果:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

四. 字典内置方法

1. dict.clear()

删除字典内所有元素

dict1 = {'name':'guobaouyuan'}
dict1.clear()
print(dict1)
运行结果:
{}
2. dict.fromkeys(键,值)

创建一个新字典,健必须是可迭代的数据类型(列表,元祖,字符串,集合,字典),值就是每个键值对中默认的值

dict1 = dict.fromkeys([1,2,3],'guobaoyuan')
dict2 = dict.fromkeys('name','guobaoyuan')
print(dict1)
print(dict2)
运行结果:
{1: 'guobaoyuan', 2: 'guobaoyuan', 3: 'guobaoyuan'}
{'n': 'guobaoyuan', 'a': 'guobaoyuan', 'm': 'guobaoyuan', 'e': 'guobaoyuan'}
3. dict.get(key, default=None)

返回指定键的值,如果值不在字典中返回default值

dict1 = {'name':'guobaoyuan','age':19}
print(dict1.get('U','没有找到啊!'))
运行结果:
没有找到啊!
4. dict.items()

以列表返回可遍历的(键, 值) 元组数组

dict1 = {'name':'guobaoyuan','age':19}
print(dict1.items())
运行结果:
dict_items([('name', 'guobaoyuan'), ('age', 19)])
5. dict.keys()

以列表返回一个字典所有的键

dict1 = {'name':'guobaoyuan','age':19}
print(dict1.keys())
运行结果:
dict_keys(['name', 'age'])
6. dict.setdefault(key, default=None)

和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default

dict1 = {'name':'guobaoyuan','age':19}
dict1.setdefault('id',1)
dict1.setdefault('age',18)
print(dict1)
运行结果:
{'name': 'guobaoyuan', 'age': 19, 'id': 1}
7. dict.update(dict2)

把字典dict2的键/值对更新到dict里

dict1 = {'name':'guobaoyuan','age':19}
dict2 = {'id':333}
dict1.update(dict2)
print(dict1)
运行结果:
{'name': 'guobaoyuan', 'age': 19, 'id': 333}
8. dict.values()

以列表返回字典中的所有值

dict1 = {'name':'guobaoyuan','age':19}
print(dict1.values())
运行结果:
dict_values(['guobaoyuan', 19])
9. pop(key[,default])

删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。

dict1 = {'name':'guobaoyuan','age':19}
print(dict1.pop('name'))
print(dict1)
运行结果:
guobaoyuan
{'age': 19}
10. popitem()

随机返回并删除字典中的一对键和值。

dict1 = {'name':'guobaoyuan','age':19}
print(dict1.popitem())
print(dict1)
运行结果:
('ss', 44)
{'name': 'guobaoyuan', 'age': 19}


猜你喜欢

转载自blog.51cto.com/13755563/2119179