唯一词词典及其在文件中的位置

时间:2018-09-16 15:22:16

标签: python python-3.x loops dictionary

我正在尝试建立单词及其对应的tweet标识符的“数据库”。

我的猜测是,字典是执行此操作的最佳选择。

标识符,用户,文本,单词在选项卡上分开。

Example of input : 
1035421931321864192 SchipholWatch   RT @vinvanoort: Zo, ik heb getekend  Genoeg #geschiphol, hoogste tijd voor een eerlijk en duurzaam #luchtvaartbeleid    RT @vinvanoort : Zo , ik heb getekend  Genoeg #geschiphol , hoogste tijd voor een eerlijk en duurzaam #luchtvaartbeleid

1035421930541772800 ev4uam2 RT @AfshinEllian1: Kennelijk vinden ze daar aan die gezellige tafel normaal dat steltje barbaren onze grondwettelijke rechten bedreigen. Zouden we ook voor andere buitenwettelijke dreigingen moeten capituleren? Wat een door ons gesubsidieerde domheid! #laatop1 #cartoonwedstrijd  RT @AfshinEllian1 : Kennelijk vinden ze daar aan die gezellige tafel normaal dat steltje barbaren onze grondwettelijke rechten bedreigen . Zouden we ook voor andere buitenwettelijke dreigingen moeten capituleren ? Wat een door ons gesubsidieerde domheid ! #laatop1 #cartoonwedstrijd

Example of desired output:
{'exampleword' : ['1035421930541772800', '1235424930545772800']}

当前代码:

def main():
    olist = []
    worddict = {}
    for line in sys.stdin:
        i,u,t,w = line.split('\t')
        splitword = w.split()
        olist.extend(splitword)


    for num,name in enumerate(olist):
        print("{} [{}]".format(name.strip(), num))

main()

到目前为止,我已经尝试遍历所有行,并在没有成功的情况下将splitword + i(这是tweet标识符)添加到字典中。

1 个答案:

答案 0 :(得分:2)

基本上,您想要的是将具有list值的字典“反向”到具有list值的另一字典。

我从实际的推文数据中抽象出来,因为这会使实际问题的答案难以理解。

贪婪的实现可能是:

import collections

def reverse_dict(input):
    output = collections.defaultdict(list)

    for key, val in input.items():
        for item in val:
            output[item].append(key)

    return output


def main():
    input = {
        'u123': ['hello', 'world'],
        'u456': ['hello', 'you'],
        'u789': ['you', 'world'],
    }

    output = reverse_dict(input)

    print output


if __name__ == '__main__':
    main()

正如@Michael Butscher所说,问题的预期输出不是有效的Python字典。上面的代码将输出:

{'world': ['u789', 'u123'], 'you': ['u789', 'u456'], 'hello': ['u456', 'u123']}

此外,正如@Austin回答的那样,使用“蛮力”解决这个问题不一定是最好的解决方案。