1
data= [('a ', 1), ('b ', 3), ('a ', 4), ('b', 2),]

如何获得两个列表,其中元组的第一个元素作为列表名称,第二个作为值?

a= [1,4]
b= [3,2]
4

4 回答 4

6

正如您在上一个问题中所解释的,您不应该尝试更改您绑定的名称。something = 3[我的意思是的左侧。] 它只会带来麻烦。你可以使用 adict代替,adefaultdict会让事情变得方便:

>>> data= [('a ', 1), ('b ', 3), ('a ', 4), ('b', 2),]
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for k, v in data:
...     d[k.strip()].append(v)
...     
>>> d
defaultdict(<type 'list'>, {'a': [1, 4], 'b': [3, 2]})

之后

>>> d['a']
[1, 4]
>>> d['b']
[3, 2]

会工作。

于 2013-02-15T20:54:17.007 回答
1

由于您示例中的某些键有一些额外的空格,我正在使用strip

In [11]: [x[1] for x in data if x[0].strip() == 'a']
Out[11]: [1, 4]

In [12]: [x[1] for x in data if x[0].strip() == 'b']
Out[12]: [3, 2]
于 2013-02-15T20:51:08.387 回答
0

列夫的答案就是你要找的。此外,您可以按任意键进行分组:

grouped = defaultdict(list)
[grouped[key].append(value) for key, value in data]    

顺便说一句,defaultdict是许多值得研究的内置类型之一。有许多类型和功能可以解决您的日常问题。至少检查operatoritertoolsfunctools模块。

于 2013-02-15T20:55:48.580 回答
0

您应该在这里使用字典,而不是创建多个变量。

In [14]: data= [('a ', 1), ('b ', 3), ('a ', 4), ('b',2),]

In [15]: dic={}

In [16]: for k,v in data:
   ....:     dic.setdefault(k.strip(),[]).append(v)
   ....:     

In [18]: dic
Out[18]: {'a': [1, 4], 'b': [3, 2]}
于 2013-02-15T21:06:08.300 回答