从python中现有的键值对列表创建一个列表

2024-06-02 09:17:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python来实现这一点。你知道吗

我有一个字母和数字对的列表,看起来像这样:

[(a,1),(a,2),(a,3),(b,10),(b,100),(c,99),(d,-1),(d,-2)]

我想做的是为每个字母表创建一个新的列表,并将所有的数值附加到其中。你知道吗

因此,输出应该如下所示:

alist = [1,2,3]
blist = [10,100]
clist = [99]
dlist = [-1,-2]

在Python中有没有一种简洁的方法可以做到这一点?你知道吗


Tags: 方法列表字母数字字母表数值dlistalist
3条回答

在看到线程中的响应并阅读了defaultdict的实现之后,我实现了自己的版本,因为我不想使用collections库。你知道吗

    mydict = {}
    for alphabet, value in data:
        try:
            mydict[alphabet].append(value)
        except KeyError:
            mydict[alphabet] = []
            mydict[alphabet].append(value)
from collections import defaultdict

data = [('a',1),('a',2),('a',3),('b',10),('b',100),('c',99),('d',-1),('d',-2)]

if __name__ == '__main__':
    result = defaultdict(list)

    for alphabet, number in data:
        result[alphabet].append(number)

或不带收集模块:

if __name__ == '__main__':
    result = {}
    for alphabet, number in data:
        if alphabet not in result:
            result[alphabet] = [number, ]
            continue
        result[alphabet].append(number)

但我认为,第一种解决办法更有效、更明确。你知道吗

如果您想避免使用defaultdict,但对使用itertools感到满意,那么可以使用一行代码

from itertools import groupby

data = [('a',1),('a',2),('a',3),('b',10),('b',100),('c',99),('d',-1),('d',-2)]
grouped = dict((key, list(pair[1] for pair in values)) for (key, values) in groupby(data, lambda pair: pair[0]))
# gives {'b': [10, 100], 'a': [1, 2, 3], 'c': [99], 'd': [-1, -2]}

相关问题 更多 >