排序和获取唯一数据的最快方法 - 想要最后一次出现?

时间:2017-01-11 16:35:38

标签: python unique-index

嗨我在Python中有这样的大数据集:

data=[[2105,90],
      [2115,100],
      [2125,110],
      [2135,120],
      [2145,130],
      [2155,140],
      [2200,110],
      [2115,109],
      [2155,142]]

我想要一个数据来自最后一次出现的结果。在上面的例子中,我想要2115 = 109和2155 = 142:

data=[[2105,90],
      [2115,109],
      [2125,110],
      [2135,120],
      [2145,130],
      [2155,142],
      [2200,110]]

3 个答案:

答案 0 :(得分:3)

您可以将data放入字典中:

>>> data
[[2105, 90], [2115, 100], [2125, 110], [2135, 120], [2145, 130], [2155, 140], [2200, 110], [2115, 109], [2155, 142]]
>>> dict(data)[2115]
109
>>> dict(data)[2155]
142

词典具有唯一键。随着从列表中添加更多条目,现有将得到更新。这会导致您最后一次出现。

答案 1 :(得分:0)

回答上述两个陈述。我有3组带有数据的文件。每组大约有一百万个文件。在上面的例子中,我有来自fileset1的6个值,来自fileset2的1个值和来自fileset3的1个值。使用字典的提示,解决方案将是这样的(我在正则表达式匹配时获取数据):

value={}
for j in ['*1981*.txt','*1990*.txt','*1991*.txt']:
    files=glob.glob(j)
    files.sort()
    for file in files:
        inFile=open(file, 'r')
        for line in inFile:
            if cregexp2.match(line):
                a=cregexp2.findall(line)[0]
                value[a[0]]=a[1]

这是一个有效但需要一些时间的解决方案。是否有人有更好的方法?

答案 2 :(得分:-1)

您可以使用Red Black BST's存储您的信息。这样,您只需要遍历少量节点。这在大多数情况下都很有用(因为树会分成两半)。