python的小技巧 黑科技

你的管子上有一

黑科技

Grouping-with-dict

目标

要求是根据某个值来group一个dict,那我们一般会写成这样:

names = ['raymond', 'rachel', 'matthew', 'roger', 'betty', 'melissa', 'judith', 'charlie']
d = {}
for name in names:
  key = len(name)
  if key not in d:
    d[key] = []
    d[key].append(name)

小技巧

for name in names:
  key = len(name)
  d.setdefault(key, []).append(name) 

关键词是setdefault理论上用get也可以?

下面这样也可以

d = defaultdict(list)
for name in names:
  key = len(name)
  d[key].append(name) 

重点在于defaultdict

ChainMap

默认