Python列表转字典

3

我有一个像这样的巨大列表

['a', '2'] ['a', '1'] ['b', '3'] ['c', '2'] ['b', '1'] ['a', '1']['b', '1'] ['c', '2']['b', '3'] ['b', '1']

我希望能够逐步讲解,以获取每个不同的第一项的第二项数量输出结果。
{a:[2,1,1] b:[3,1,3,1] c:[2,2]}

我有一个类似的程序,大约有一万行代码,这只是一个例子。 - user1189851
你有列表的列表吗? - Grijesh Chauhan
3个回答

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)

结果:

>>> result
{'a': ['2', '1', '1'], 'c': ['2', '2'], 'b': ['3', '1', '1', '3', '1']}

我更喜欢使用 dict.setdefault() 而不是 defaultdict,因为这样你最终会得到一个普通的字典,而如果访问不存在的键,则会引发异常,而不是返回一个值(在这种情况下是一个空列表)。


5
from collections import defaultdict

dd = defaultdict(list)
for k, v in your_list:
    dd[k].append(v)

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

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))}

2
@GrijeshChauhan 这实际上是Python文档中defaultdict的示例代码 :D - Sylvain Leroux

3
你可以在这里使用 `collections.defaultdict`:
>>> from collections import defaultdict
>>> lis = [['a', '2'], ['a', '1'], ['b', '3'], ['c', '2'], ['b', '1'], ['a', '1'],['b', '1'], ['c', '2'],['b', '3'], ['b', '1']]
>>> dic = defaultdict(list)
>>> for k,v in lis:
       dic[k].append(int(v))
>>> dic
defaultdict(<type 'list'>, {'a': [2, 1, 1], 'c': [2, 2], 'b': [3, 1, 1, 3, 1]})
>>> dic['b']
[3, 1, 1, 3, 1]
>>> dic['a']
[2, 1, 1]

1
“k,v在lis中”这种写法被称为解包吗?就像我们可以这样做“a,b = [1,2]”。 - Grijesh Chauhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接