本文首发于 知乎
本文包括如下几个部分
- 字典键值互换
- 统计频数
- 从字典中提取信息
- 键值转换
字典键值互换
值唯一的情况
d = {'a': 1, 'b': 2}
{v: k for k, v in d.items()}
# {1: 'a', 2: 'b'}
值不唯一的情况
d = {'a': 1, 'b': 2, 'c': 3, 'd': 1}
# 想要输出
{1: ['a', 'd'], 2: ['b'], 3: ['c']}
# 第一种方法
result = {}
for k, v in d.items():
result[v] = result.get(v, [])
result[v].append(k)
result
# 第二种方法
result = {}
for k, v in d.items():
result[v] = result.get(v, []) + [k]
result
# 第三种方法
result = {}
for k, v in d.items():
result.setdefault(v, []).append(k)
result
这里说明一下,
get
和
setdefault
的区别是,当键不存在时,
get
会返回设置的默认值,而
setdefault
会将设置好的默认值对应到键上,更改原字典,之后再返回键的值。所以说
get
不能像
setdefault
那么用的原因是,初始化时不会自动修改原字典,需要通过赋值实现修改。而如果要找的键原本就在字典中存在的话,
get
和
setdefault
调用
append
都能对原字典进行修改,具体情况读者可以自己去试。
如果使用
collections
模块,还有第四种方法
from collections import defaultdict
result = defaultdict(list)
for