专栏名称: dwzb
目录
相关文章推荐
健康中国  ·  习近平在贵州考察时强调 ... ·  3 天前  
51好读  ›  专栏  ›  dwzb

玩转python字典与列表(中)

dwzb  · 掘金  ·  · 2018-05-28 03:23

正文

玩转python字典与列表(中)

本文首发于 知乎

本文包括如下几个部分

  • 字典键值互换
  • 统计频数
  • 从字典中提取信息
  • 键值转换

字典键值互换

值唯一的情况

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






请到「今天看啥」查看全文