Python实战教程|基础数据类型之字典

    /    2018-07-04

  字典是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不存在会报错

dict1 = {'user':'alex','password':'alex3714'}
print(dict1['user'])
print(dict1['password'])
print(dict1['age']) #如果字典中没有age键,会报错
运行结果:
alex
alex3714
Traceback (most recent call last):
File "", line 1, in
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
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}

(6)

分享至