Python 字典的值可以是任意类型,其中可以包括列表。但是,在为字典的某个键赋值时,如果这个键的值已经是列表类型,我们很可能遇到一个问题:如何保留列表原有的元素并添加新元素,而不会出现重复的情况呢?
下面是针对这个问题的完整攻略。
1. 使用 setdefault 方法
要给字典某个键的值添加新元素,可以使用 .append()
方法。如果这个键原先的值没有但是预计会成为一个列表,可以使用 .append()
方法直接为该键赋值。但如果这个键已经有值了,我们需要先检查这个值是否是列表,如果不是,就不得不新建一个列表,再为其添加新元素。这个过程比较繁琐。
Python 的 dict
类型提供了 .setdefault()
方法,它可以直接实现以上操作。该方法能够在给指定键赋默认值(缺省值)的同时,保留该键原本的的值(如果存在)。他的用法如下:
d = {}
d.setdefault(key, []).append(val)
其中 key
是要添加元素的字典的键,val
是要添加的新元素。如果该键的值为列表,就直接在列表中添加新元素;如果该键没有对应的值,就新建一个列表,并将该键的值设为这个列表;最后,将新元素添加到该列表中。
下面是一个示例:
>>> d = {'a':[1,2],'b':5}
>>> d.setdefault('a',[]).append(3)
>>> d
{'a': [1, 2, 3], 'b': 5}
2. 使用 defaultdict 方法
collections
模块提供了一个名为 defaultdict
的字典类,它可以为一个不存在的键自动创建一个默认值。我们可以使用 defaultdict
来避免出现重复添加的问题。
默认情况下,defaultdict
的值是一个空的列表。当我们需要添加元素时,只需要像操作普通字典一样添加即可,无需考虑该键是否已经存在。这个过程如下:
from collections import defaultdict
d = defaultdict(list)
d[key].append(val)
其中的 list
指定了默认值。如果所对应的键不存在,defaultdict
会自动为其创建一个空列表,然后将新的键值对添加到字典中。如果键已经存在,就可以直接将新的元素添加到对应列表中。
下面是一个示例:
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d['a'].append(1)
>>> d['b'].append(2)
>>> d['a'].append(3)
>>> d
defaultdict(<class 'list'>, {'a': [1, 3], 'b': [2]})
这个方法非常适合于我们每次需要添加的键值对的值类型是列表。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决python字典对值(值为列表)赋值出现重复的问题 - Python技术站