在Python中动态创建列表

时间:2015-04-15 20:04:59

标签: python pandas

我有一堆与不同群组相关联的项目,我最终想为每个群组创建一个列表,其中包含所有相关项目。

问题是我不知道有多少组,所以如何动态生成正确数量的列表,以及如何调用它们?

我正在循环浏览item_listgroup_list两个不同系列,彼此完美对齐,如item_list[item]group_list[item]中有相应的组

以下是一些原始数据:

item list   group list
   A             1
   B             1
   C             2
   D             1
   E             2
   F             1
   G             2
   H             2
   I             1
   J             2

这是我到目前为止所做的:

groups = []

for item in item_list:
    groups.append(group_list[item])

# Get only unique values (instead of having groups 1,1,1,2,2 --> 1,2)
group_set = list(set(groups))

# Number of lists that need to be generated
len(group_set)

我最终希望得到什么:

[IN]: print list_1:
[OUT]: ['A', 'B', 'D', 'F', 'I']

[IN]: print list_2:
[OUT]: ['C', 'E', 'G', 'H', 'J']

其中生成了list_1和list_2,因为我当前代码中的len(group_set)等于2.

我只是不确定如何动态生成该数量的列表,并将每个项目放在适当的列表中。

非常感谢任何建议/指导...

2 个答案:

答案 0 :(得分:1)

您可以使用python词典理解来编译您想要实现的列表......下一个代码块中的最后两行执行繁重的工作。代码块的其余部分是我将您的数据放入pandas。

import pandas as pd

# get your data into pandas
data = '''
item_list     group_list
A             1
B             1
C             2
D             1
E             2
F             1
G             2
H             2
I             1
J             2'''
from StringIO import StringIO # import from io for python 3
df = pd.read_csv(StringIO(data), sep=r'\s+', index_col=None, header=0)

# use a dictionary comprehension to compile the collection of lists
lists = {x: df[df['group_list'] == x].item_list.tolist() 
    for x in df['group_list'].unique()}

在ipython中给了我以下内容:

In [27]: print(lists)
{1: ['A', 'B', 'D', 'F', 'I'], 2: ['C', 'E', 'G', 'H', 'J']}

In [28]: print(lists[1])
['A', 'B', 'D', 'F', 'I']

In [29]: print(lists[2])
['C', 'E', 'G', 'H', 'J']

答案 1 :(得分:1)

或者你可以做上面提到的@EdChum ......

In [11]: x = df.groupby('group_list')['item_list'].apply(lambda x: x.tolist())

In [12]: print(x)
group_list
1    [A, B, D, F, I]
2    [C, E, G, H, J]
Name: item_list, dtype: object

In [13]: print(x[1])
['A', 'B', 'D', 'F', 'I']

In [14]: print(x[2])
['C', 'E', 'G', 'H', 'J']