我正试图建立一个单词的“数据库”及其相应的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()到目前为止,我已经尝试过迭代这些行,并在字典中添加拆分词+i(这是tweet标识符),但没有成功。
发布于 2018-09-16 15:37:24
基本上,您想要的是将带有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所说,您的问题的预期输出不是有效的Python字典。上述代码将输出:
{'world': ['u789', 'u123'], 'you': ['u789', 'u456'], 'hello': ['u456', 'u123']}此外,正如奥斯汀回答的那样,用“蛮力”来解决这个问题并不一定是最好的解决办法。
https://stackoverflow.com/questions/52355566
复制相似问题