如何以最有效的方式翻转数据集?

时间:2019-03-11 06:25:27

标签: python python-3.x algorithm

假设我们有一个像这样的数据集:

a: 1,2,3,5,6
b: 4,1,2
c: 1,4

现在我们要将这个数据集转换为:

1: a,b,c
2: a,b
3: a
4: b,c
5: a
6: a

可以通过字典来完成此转换,但是有一种方法可以更有效地完成此操作

目前我的工作如下:

uFile = open("t/u.txt","r")
uDic = dict()
for cnt1, line in enumerate(uFile):
    lineAr = line.strip().split(' ')
    for item in lineAr:
        if item not in uDic.keys():
           uDic[item] = []
        uDic[item].append(cnt1)

然后保存输出。

3 个答案:

答案 0 :(得分:3)

为此使用defaultdict:

from collections import defaultdict
d = {'a': [1, 2, 3, 5, 6], 'b': [4, 1, 2], 'c': [1, 4]}
o = defaultdict(list)

for k, v in d.items():
    for vv in v:
        o[vv].append(k)

print(dict(o))
{1: ['a', 'b', 'c'],
 2: ['a', 'b'],
 3: ['a'],
 5: ['a'],
 6: ['a'],
 4: ['b', 'c']}

答案 1 :(得分:0)

词典方法可能最快。我将展示我的工作以及为什么我认为它最快。

// store old data
dOld = {}
dOld['a'] = [1,2,3,5,6]
dOld['b'] = [4,1,2]
dOld['c'] = [1,4]

// create dictionary for new data
dNew = {}

// go through letters
for key in dOld:
        // go through numbers
        for listItem in dOld[key]:
                // put each letter in the list of letters
                // for the current number
                if listItem in dNew:
                        dNew[listItem].append(key)
                else:
                        dNew[listItem] = [key]

// check work by printings things out
for i in dNew:
        print(i, end="")
        print(dNew[i])

我们必须为每个具有至少一个字母的字母循环遍历每个数字,以将其从旧字典中删除,然后将其放入新字典中。有了这段代码,我们就可以做到这一点-我们所看到的数据不会比我们需要的更多。不过我有点困惑-您用字典来格式化您的答案,所以我认为输入和输出必须采用字典形式。

您能否详细说明所需的格式?另外,由于事情花费了很长时间,因此文件I / O可能花费了很长时间。那就是我曾经发生的事情-除非您切换语言,否则这是不可避免的。

答案 2 :(得分:0)

我将采用以下更简单的方法:

In [2]: d 
Out[2]: {'a': [1, 2, 3, 5, 6], 'b': [4, 1, 2], 'c': [1, 4]}

In [3]: dd = {}

In [4]: for k,v in d.items():
   ...:     for e in v:
   ...:         val = dd.get(str(e), [])
   ...:         dd[str(e)] = val + [k]
   ...:         

In [5]: dd
Out[5]: 
{'1': ['a', 'b', 'c'],
 '2': ['a', 'b'],
 '3': ['a'],
 '5': ['a'],
 '6': ['a'],
 '4': ['b', 'c']}

此链接可能有助于理解为什么将键变成stringswhy-must-dictionary-keys-be-immutable