Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python中现有的键值对列表创建一个列表_Python - Fatal编程技术网

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

从python中现有的键值对列表创建一个列表,python,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中有没有一种简洁的方法可以做到这一点 from collecti

我正试图想出一种用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中有没有一种简洁的方法可以做到这一点

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)

但我认为,第一个解决方案更有效、更明确

您可以使用
collections
模块中的
defaultdict
进行以下操作:

from collections import defaultdict

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

for k,v in l:
    d[k].append(v)

for k,v in d.items():
    exec(k + "list=" + str(v))

如果您希望避免使用
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]}

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

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

你听说过defaultdict吗?@AvinashRaj:我没听说。谢谢,如果我不想使用集合库,有没有一种不用defaultdict也能做到这一点的方法?是的,当然不用defaultdict也能做到,请参见编辑后的回答我实际上实现了我自己的字典。不过还是谢谢你