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

Python 基于唯一值将列表拆分为两个列表,python,python-2.7,Python,Python 2.7,我有一个文本文件,看起来像这样: hello 12 hello 56 world 25 world 26 python中有没有一种方法可以解析我从读取这些数据中获得的列表,从而获得两个独立的嵌套列表(或numpy数组)?一个用于包含hello的前两行,另一个用于包含world的下两行。我基本上需要为第一列中的独特内容获取一个单独的嵌套列表(因此“hello”和“world”以前是未知的)。循环此: dict={} #start the loop here x=readdatafromfile.

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

hello 12
hello 56
world 25
world 26
python中有没有一种方法可以解析我从读取这些数据中获得的列表,从而获得两个独立的嵌套列表(或numpy数组)?一个用于包含hello的前两行,另一个用于包含world的下两行。我基本上需要为第一列中的独特内容获取一个单独的嵌套列表(因此“hello”和“world”以前是未知的)。

循环此:

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
使用dict并按第一列分组:

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())
这将为您提供两个单独列表中的所有值:

[['25', '26'], ['12', '56']
如果数据始终在两个部分中,则可以使用groupby:

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))])
这将提供相同的输出:

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

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


样本数据的结果应该是什么样的?为什么要谈论嵌套列表?所以要按第一列进行分组?
print(list(list(set(x.split()[0]表示lst中的x))
最好是发布预期的输出使用字典进行分组,使用第一列作为键将行附加到list@HumphreyTriscuit事实上,我还没有尝试过任何东西。只是寻找指针或库,不一定是一个精确的解决方案,如果我事先不知道唯一的单词,我不知道是否有办法拆分。谢谢你的回答!我刚试过这个,效果很好。您使用的第二种方法是我将对其进行一点分析以进一步了解的方法。不用担心,groupby只对具有相同第一个元素(即itemgetter(0))的连续元素进行分组。我们只需从每组中抽取第二个元素,即理解中的每一个v。非常感谢您的回答。我也不能接受你的答案,但我试过了,效果很好。谢谢!
>>> from collections import OrderedDict
>>> result = OrderedDict()
>>> with  open('input.txt') as f:
...     for line in f:
...         key, val = line.split()
...         result.setdefault(key, []).append(int(val))
... 
>>> result
OrderedDict([('hello', [12, 56]), ('world', [25, 26]))