Python-字典

  1. 字典
    1. 字典的实现原理:
    2. 特点:
    3. 字典的创建
      1. 1、使用{},不可变类型的数据都可以作为字典的key
      2. 2、使用内置函数dict()
      3. 3、dict.fromkeys()方法通过参数指定所有的key,所有value默认都是None
    4. 字典的查操作
      1. 1、使用中括号,如果字典中不存在指定的key,抛出KeyError
      2. 2、调用get方法,如果字典中不存在指定的key,不会抛出KeyError,而是返回None
      3. 3、通过运算符in (not in)检查字典中是否存在(不存在)指定的key
    5. 字典的改操作
      1. 1、为已经存在的key赋予一个新的值,一次只能修改一个key对应的value
      2. 2、调用方法update(),一次至少修改一个key对应的value
    6. 字典的增操作
    7. 1、为不存在的key赋予一个value值,一次只能添加一个key-value对
    8. 2、调用update()方法,同样的,有上述修改中的几种方式,传入的key的值不能重复,否则就是更新,而不是新增了
    9. 字典的删操作
      1. 1、调用方法pop(),会返回删除key的value值,字典的pop()方法需要传一个参数,传的是字典中的任一的key值
      2. 2、使用del语句,一次只能删除一个key-value对
      3. 3、调用方法popitem(),会返回删除的key的value值,该方法不能传递参数,一次只删除一个任意的key-value对
      4. 4、调用方法clear(),清空字典
  2. 为字典中指定的key设置默认的value值
    1. 字典的视图
    2. 视图会随字典的变化而变化
    3. 借助字典创建格式化字符串

字典

字典的实现原理:

和查字典类似,当我们在字典中查找某个数据时,一种办法是从字典的第一页开始往后翻,直到找我们需要的数据为止。这种方法就是在列表中查找要元素的办法,缺点是字典中的数据越多,其查找速度越低。第二种办法是现在字典的索引表里查找数据对应的位置,然后直接翻到这个位置查找数据,这种方法比第一种方法效率高,查找速度非常快。

特点:

  1. 字典中的所有元素都是key-value对,通过指定的key,总能找到确定的vlaue
  2. 字典中不能存在重复的key,但是可以存在重复的vlaue
  3. 字典中的元素是无序的,顺序不重要,重要的是key-value映射关系
  4. 字典中的key必须是不可变对象,因为要通过key的hash值来计算value的存储位置,必须确保每次计算的hash值是相同的,只有不可变对象才存在hash值
  5. 字典可以根据需要动态伸缩,使用前不需要声明字典的容量
  6. 字典会浪费较大的内存,是以空间换时间

字典的创建

1、使用{},不可变类型的数据都可以作为字典的key

>>> d = {'name':'Jerry', 'age':18}
>>> d
{'name': 'Jerry', 'age': 18}
>>> dict({1:2})
{1: 2}
>>> dict({(1,):2})
{(1,): 2}
>>> dict({frozenset([1]):1})
{frozenset({1}): 1}

2、使用内置函数dict()

方法1

>>> d = dict(name = 'Jerry', age = 18)
>>> d
{'name': 'Jerry', 'age': 18}

方法2

>>> d = dict([('name', 'Jerry'), ('age', 18)])
>>> d
{'name': 'Jerry', 'age': 18}

方法3

>>> d = dict({'name':'Jerry', 'age':18})
>>> d
{'name': 'Jerry', 'age': 18}

方法4

>>> d = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d
{'one': 1, 'two': 2, 'three': 3}

3、dict.fromkeys()方法通过参数指定所有的key,所有value默认都是None

>>> dict.fromkeys(['name', 'age'])
{'name': None, 'age': None}
>>> dict.fromkeys(('name', 'age'))
{'name': None, 'age': None}
>>> dict.fromkeys(('name', 'age'), 'N/A')
{'name': 'N/A', 'age': 'N/A'}

字典的查操作

1、使用中括号,如果字典中不存在指定的key,抛出KeyError

>>> d = {'name':'Jerry', 'age':18}

>>> d['name']
'Jerry'

>>> d['ad']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'ad'

2、调用get方法,如果字典中不存在指定的key,不会抛出KeyError,而是返回None

>>> d = {'name':'Jerry', 'age':18}

>>> d.get('name')
'Jerry'

>>> print(d.get('ad'))
None

可以通过参数设置默认的value,以便在字典中不存在指定的key时,将其返回

>>> print(d.get('ad', 'Beijing'))
Beijing

3、通过运算符in (not in)检查字典中是否存在(不存在)指定的key

>>> d
{'name': 'Jerry', 'age': 18}
>>> print('name' in d)
True
>>> print('ad' in d)
False
>>>
>>> print('ad' not in d)
True

字典的改操作

1、为已经存在的key赋予一个新的值,一次只能修改一个key对应的value

>>> d
{'name': 'Jerry', 'age': 18}
>>>
>>> d['age'] = 20
>>> d
{'name': 'Jerry', 'age': 20}

2、调用方法update(),一次至少修改一个key对应的value

>>> d = {'name': 'Jerry', 'age': 18, 'add': 'Beijing'}

‘’传入一个字典

>>> d.update({'name':'Jack', 'age':20})
>>> d
{'name': 'Jack', 'age': 20, 'add': 'Beijing'}

传入一个元组的列表

>>> d
{'name': 'Jack', 'age': 20, 'add': 'Beijing'}
>>>
>>> d.update([('name', 'Mike'), ('age', 25)])
>>>
>>> d
{'name': 'Mike', 'age': 25, 'add': 'Beijing'}

将key当做变量

>>> d
{'name': 'Mike', 'age': 25, 'add': 'Beijing'}
>>>
>>> d.update(name = 'Tom', age = 17)
>>> d
{'name': 'Tom', 'age': 17, 'add': 'Beijing'}

字典的增操作

如果想要向字典中添加key-value对,有两种方法:

1、为不存在的key赋予一个value值,一次只能添加一个key-value对

>>> d = {'name': 'Jerry', 'age': 20}
>>> d['add'] = 'Beijing'
>>> d
{'name': 'Jerry', 'age': 20, 'add': 'Beijing'}

2、调用update()方法,同样的,有上述修改中的几种方式,传入的key的值不能重复,否则就是更新,而不是新增了

传入一个字典

>>> d = {'name': 'Jerry', 'age': 20}
>>> d.update({'add':'Beijing', 'gender':'male'})
>>> d
{'name': 'Jerry', 'age': 20, 'add': 'Beijing', 'gender': 'male'}

传入一个元组的列表

>>> d = {'name': 'Jerry', 'age': 20}
>>>
>>> d.update([('add','Beijing'), ('gender','male')])
>>> d
{'name': 'Jerry', 'age': 20, 'add': 'Beijing', 'gender': 'male'}

将key当做变量

>>> d = {'name': 'Jerry', 'age': 20}
>>> d.update(add = 'Beijing', gender = 'male')
>>> d
{'name': 'Jerry', 'age': 20, 'add': 'Beijing', 'gender': 'male'}

字典的删操作

1、调用方法pop(),会返回删除key的value值,字典的pop()方法需要传一个参数,传的是字典中的任一的key值

>>> d = {'name': 'Jerry', 'age': 20, 'add': 'Beijing', 'gender': 'male'}
>>>
>>> d.pop('age')
20
>>> d
{'name': 'Jerry', 'add': 'Beijing', 'gender': 'male'}

如果pop的key不存在,则抛出KeyError

>>> d.pop('score')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'score'

为了防止指定的key不存在时抛出KeyError,可以通过参数指定一个默认返回的value

>>> d.pop('score', 90)
90

2、使用del语句,一次只能删除一个key-value对

>>> d = {'name': 'Jerry', 'age': 20, 'add': 'Beijing', 'gender': 'male'}
>>> del d['age']
>>> d
{'name': 'Jerry', 'add': 'Beijing', 'gender': 'male'}

3、调用方法popitem(),会返回删除的key的value值,该方法不能传递参数,一次只删除一个任意的key-value对

>>> d = {'name': 'Jerry', 'age': 20, 'add': 'Beijing', 'gender': 'male'}
>>> d.popitem()
('gender', 'male')
>>> d
{'name': 'Jerry', 'age': 20, 'add': 'Beijing'}
>>> d.popitem()
('add', 'Beijing')
>>> d
{'name': 'Jerry', 'age': 20}
>>>
>>> d.popitem()
('age', 20)
>>> d
{'name': 'Jerry'}
>>>
>>> d.popitem()
('name', 'Jerry')
>>> d
{}

4、调用方法clear(),清空字典

>>> d = {'name': 'Jerry', 'age': 20, 'add': 'Beijing', 'gender': 'male'}
>>> d.clear()
>>> d
{}

为字典中指定的key设置默认的value值

为了确保字典中指定的key总是存在的,可以调用方法setdefault,这样,
1、如果字典中存在指定的key,该方法返回指定的key对应的value,字典不发生变化。

>>> d = {'name': 'Jerry'}
>>> d.setdefault('name', 'newname')
'Jerry'

2、如果字典中不存在指定的key,该方法返回指定的默认value值,并会在字典中添加一个对应key-value对

>>> d.setdefault('newname', 'newname')
'newname'
>>> d
{'name': 'Jerry', 'newname': 'newname'}

字典的视图

得到字典相关视图的三个方法:
1、keys()方法:返回字典所有key的视图

>>> d = {'name': 'Jerry', 'age': 20, 'add': 'Beijing', 'gender': 'male'}
>>>
>>> d.keys()
dict_keys(['name', 'age', 'add', 'gender'])

2、values()方法:返回字典所有value的视图

>>> d.values()
dict_values(['Jerry', 20, 'Beijing', 'male'])

3、items()方法:返回字典所有key-value对的视图

>>> d.items()
dict_items([('name', 'Jerry'), ('age', 20), ('add', 'Beijing'), ('gender', 'male')])

视图会随字典的变化而变化

以keys举例,其他两个同理

>>> d = {'name': 'Jerry', 'age': 20, 'add': 'Beijing', 'gender': 'male'}
>>> k = d.keys()
>>> k
dict_keys(['name', 'age', 'add', 'gender'])
>>>
>>> d.pop('gender')
'male'
>>>
>>> d
{'name': 'Jerry', 'age': 20, 'add': 'Beijing'}
>>>
>>> k
dict_keys(['name', 'age', 'add'])

借助字典创建格式化字符串

当格式化字符串中的占位符是%,并且占位符对应的实际值来自于某个字典的value时,可以把所有的实际值改写为字典,同时根据字典的value对应的key,在占位符%后添加”(key)”,其中,字典的key会被添加一堆引号,因此,如果字典的key是字符串,需要去掉字典的key自带的引号。

>>> d = {'name': 'Jerry', 'age': 20, 'add': 'Beijing', 'gender': 'male'}
>>> print('姓名:%s,年龄:%d,住址:%s,性别:%s' %(d['name'], d['age'], d['add'], d['gender']))
姓名:Jerry,年龄:20,住址:Beijing,性别:male

可以改写为

>>> d = {'name': 'Jerry', 'age': 20, 'add': 'Beijing', 'gender': 'male'}
>>> print('姓名:%(name)s,年龄:%(age)d,住址:%(add)s,性别:%(gender)s' %(d))
姓名:Jerry,年龄:20,住址:Beijing,性别:male

{}作为占位符

>>> d = {'name': 'Jerry', 'age': 20, 'add': 'Beijing', 'gender': 'male'}
>>> print('姓名:{},年龄:{},住址:{},性别:{}'.format(d['name'], d['age'], d['add'], d['gender']))
姓名:Jerry,年龄:20,住址:Beijing,性别:male

可以改写为

>>> d = {'name': 'Jerry', 'age': 20, 'add': 'Beijing', 'gender': 'male'}
>>> print('姓名:{name},年龄:{age},住址:{add},性别:{gender}'.format_map(d))
姓名:Jerry,年龄:20,住址:Beijing,性别:male

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 289211569@qq.com