Словарь уникальных слов и их положение в файле - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь создать «базу данных» слов и соответствующего идентификатора твита.

Я предполагаю, что словарь - лучший вариант для этого.

Идентификатор, пользователь, текст, слова разделяются на вкладке.

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 (идентификатор твита) в словарь, но безуспешно.

1 Ответ

0 голосов
/ 16 сентября 2018

По сути, вам нужно «перевернуть» словарь со значениями 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, решение этой проблемы с использованием "грубой силы" не обязательно будет лучшим решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...