我正在尝试建立单词及其对应的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标识符)添加到字典中。
答案 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回答的那样,使用“蛮力”解决这个问题不一定是最好的解决方案。