基于唯一值python将列表拆分为两个列表

时间:2016-03-10 23:07:28

标签: python python-2.7

我有一个看起来像这样的文本文件:

hello 12
hello 56
world 25
world 26

在python中是否有办法解析我从读取此数据获得的列表以获取两个单独的嵌套列表(或numpy数组)?一个用于包含hello的前两行,另一个用于包含world的下两行。我基本上需要为第一列中的独特内容获取单独的嵌套列表(因此“hello”和“world”以前不知道)。

3 个答案:

答案 0 :(得分:1)

使用 dict 并按第一列分组:

newfile.txt

这将为您提供两个单独列表中的所有值:

from csv import  reader
from collections import defaultdict
with open("in.txt") as f:
    d = defaultdict(list)
    for k, v in reader(f,delimiter=" "):
        d[k].append(v)

print(d.values())

如果数据总是分为两部分,则可以使用groupby:

[['25', '26'], ['12', '56']

哪个会提供相同的输出:

from itertools import groupby
from csv import  reader
from operator import itemgetter

with open("in.txt") as f:
    print([list(map(itemgetter(1), v)) 
           for k, v in groupby(reader(f,delimiter=" "), key=itemgetter(0))])

答案 1 :(得分:1)

由于您似乎不确定哪种数据结构适合存储结果,因此我建议使用有序字典将第一列中的关键字映射到整数值列表(按其外观顺序) :

/projects

答案 2 :(得分:0)

循环:

dict={}
#start the loop here
x=readdatafromfile.split()

if x[0] not in dict.keys():
    dict[x[0]] = list()
dict[x[0]].append(x[1])

#end loop here
print dict.keys() #for first column
print dict['hello'] #for list of values of hello