[英]Python what is the fastest way to make this list tuples into a dict?
I have a list of tuples that looks like this; 我有一个看起来像这样的元组列表。
li = [('Replicate 1', '_E748_.txt'),
('Replicate 1', '_E749_.txt'),
('Replicate 2', '_E758_.txt'),
('Replicate 2', '_E759_.txt')]
What is the fastest way to create a dict that looks like this; 创建这样的字典的最快方法是什么?
{'Replicate1': ['_E748_.txt', '_E749_.txt'],
'Replicate2': ['_E758_.txt', '_E759_.txt']}
Given 特定
>>> li = [('Replicate 1', '_E748_.txt'),
... ('Replicate 1', '_E749_.txt'),
... ('Replicate 2', '_E758_.txt'),
... ('Replicate 2', '_E759_.txt')]
Do 做
>>> d = {}
>>> for k, v in li:
... d.setdefault(k, []).append(v)
...
>>> d
{'Replicate 2': ['_E758_.txt', '_E759_.txt'], 'Replicate 1': ['_E748_.txt', '_E749_.txt']}
Or 要么
>>> from collections import defaultdict
>>> d2 = defaultdict(list)
>>> for k, v in li:
... d2[k].append(v)
...
>>> d2
defaultdict(<type 'list'>, {'Replicate 2': ['_E758_.txt', '_E759_.txt'], 'Replicate 1': ['_E748_.txt', '_E749_.txt']})
Or even the overly fancy 甚至过于花哨
>>> from itertools import groupby
>>> from operator import itemgetter
>>> get0, get1 = itemgetter(0), itemgetter(1)
>>> dict((key, list(map(get1, subit))) for key, subit in groupby(sorted(li), get0))
{'Replicate 2': ['_E758_.txt', '_E759_.txt'], 'Replicate 1': ['_E748_.txt', '_E749_.txt']}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.