【问题标题】:Dictionary of unique words and their position in a file唯一词词典及其在文件中的位置
【发布时间】:2018-09-16 15:22:15
【问题描述】:

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

我的猜测是字典是这样做的最佳选择。

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

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(这是推文标识符)添加到字典中,但没有成功。

【问题讨论】:

  • 您想要的输出不是有效的 Python 字典(似乎一个键有两个值或一个键没有值)
  • 最好将标识符用作字典的键(假设不会重复)并将其示例词用作值列表。

标签: python python-3.x loops dictionary


【解决方案1】:

基本上,您想要的是将具有 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 回答的那样,使用“蛮力”解决这个问题不一定是最好的解决方案。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多