Python列表到dict

use*_*851 3 python dictionary list

我有一个很大的清单

['a', '2'] ['a', '1'] ['b', '3'] ['c', '2'] ['b', '1'] ['a', '1']['b', '1'] ['c', '2']['b', '3'] ['b', '1']
Run Code Online (Sandbox Code Playgroud)

我想通过这个来获得每个第二项的数量输出以获得不同的第一项:

{a:[2,1,1] b:[3,1,3,1] c:[2,2]}
Run Code Online (Sandbox Code Playgroud)

And*_*ark 11

data = [['a','2'],['a','1'],['b','3'],['c','2'],['b','1'],['a','1'],['b','1'],['c','2'],['b','3'],['b','1']]
result = {}
for key, value in data:
    result.setdefault(key, []).append(value)
Run Code Online (Sandbox Code Playgroud)

结果:

>>> result
{'a': ['2', '1', '1'], 'c': ['2', '2'], 'b': ['3', '1', '1', '3', '1']}
Run Code Online (Sandbox Code Playgroud)

我更喜欢dict.setdefault()而不是defaultdict,因为你最终得到了一个普通的字典,试图访问一个不存在的密钥会引发异常而不是给出一个值(在这种情况下是一个空列表).


Jon*_*nts 5

from collections import defaultdict

dd = defaultdict(list)
for k, v in your_list:
    dd[k].append(v)
Run Code Online (Sandbox Code Playgroud)

或者,您的数据已经排序(删除已排序的步骤 - 或者可以排序......)

from itertools import groupby
from operator import itemgetter
print {k: [v[1] for v in g] for k, g in groupby(sorted(d), itemgetter(0))}
Run Code Online (Sandbox Code Playgroud)

  • @GrijeshChauhan这实际上是Python文档中[`defaultdict`](http://docs.python.org/2/library/collections.html#defaultdict-examples)的示例代码:D (2认同)