Ma question est assez similaire aux autres mais ici ma liste est une sorte de spécial.
Je dois créer un moteur de recherche à Python. Pour cela, je dois créer un dictionnaire comme je l'ai dit dans le titre. P>
Permettez-moi de vous donner le contexte: p>
J'ai fondamentalement un texte composé de plusieurs parties séparées par "[===========]". / p>
comme: p> J'ai créé un algorithme qui combine ces listes jusqu'à ce que nous "touchent" un "==========" et Placez-les dans une seule liste où [Blablabla BlaBliblou] est la liste [o], [blanchablou] [blibloubla] est la liste [1] etc ... p> L'algorithme: p> {blablabla:1, blablilou:1, blablablou:2, blibloubla:2, oubabababa:3,
baboulila:3}
3 Réponses :
On dirait-il? Il vous obtiendra la sortie attendue: P> defaultdict(list,
{'blablabla': [0],
'blabliblou': [0],
'blablablou': [1],
'blibloubla': [1],
'oubabababa': [2],
'baboulila': [2]})
Merci piyush! Cela fonctionne presque mais les clés sont les lettres. La sortie que j'ai est comme: {b: [0], l: [0]} etc
from collections import defaultdict
l = [ ["blablabla", "blabliblou"], ["blablablou", "blibloubla"], ["oubabababa", "baboulila"] ]
d = defaultdict(list)
for i, line in enumerate(l):
[d[word].append(i) for word in line]
print(dict(d))
>>> {'blablabla': [0], 'oubabababa': [2], 'blablablou': [1], 'blabliblou': [0], 'baboulila': [2], 'blibloubla': [1]}
Le texte BLAbla n'est pas le texte que je dois utiliser mais je l'ai utilisé comme exemple pour faciliter la compréhension. Donc, j'ai écrit: 'Importer Re à partir des collections Importation de défautDict Dict = Ouvrir ("Docs-parl-mini.txt", "R", codage = "utf-8") Liste = [] d = fichier.read () x = = re.split (r "= +", d) pour i in gamme (len (x)): liste.append (x [i]) d = defaultDict (liste) pour i, ligne inumérer (1): [D [MOT]
Oh désolé, je ne sais pas vraiment comment mettre des pièces de code dans mes messages
Dans pour i, ligne en énumérant (l) code> c'est un l code> (lettre) non 1. Mais je pense que vous rencontrerez d'autres erreurs. Tout d'abord, vous ne devriez pas utiliser list code> comme nom pour les variables, car il écrase la liste code> méthode, et c'est pourquoi vous obtenez la prochaine erreur
Oh ok je l'ai réparé! Et maintenant j'ai: D = DefaultDict (Liste) TypeError: Premier argument doit être appelable ou aucun
'list = []' 'd = fichier.read ()' 'x = re.split (r "= +", d)' 'pour i in gamme (len (x)):' 'Liste.append (x [i]) 'Cette partie du code est celle que j'ai écrite pour créer ma liste
Vous ne devez jamais utiliser list code>, dict code>, tuple code> etc .. comme nom de vos variables
Quel erreur ! Merci de me dire, je suis confus! Je vais corriger
Dans mon code l code>, que vous avez mis écrire comme 1, est la liste des listes que vous obtenez de votre regex, [["BLABLABLA"] ["BLABLABLOU"] ["BLABLABLOU", "BLABLABLOU ] "[" Oubabababa "," Baboulila "]]] Code>, alors adaptez votre code approppatoire
Oui Ne t'inquiète pas! Je me demandais juste si c'était quelque chose qui ne va pas avec ça
Pourriez-vous s'il vous plaît vérifier mon code ci-dessus? Je l'ai mis à jour
Cela ne fonctionne pas comme je le ferais: les clés sont les lettres et les valeurs sont les sublistes où la lettre se produit
Pouvez-vous poster un exemple d'une liste réelle l code>? Même juste quelques éléments si trop grand
Il s'agit d'un échantillon du texte de base: en préposé, je Souhaièreté Que des observions de la minute de silence. =========== Madame la Présidente, c'est une motion de procédre. VOUS AVEZ PROBABLE DE L'AVEZ APPRIS PRESSE QU DES CROMES Immondes ONT Été Perpétrés au Sri Lanka. ========== MA Question Porte sur ONU SUJET QUI EST À L'ORDRE DU JOUR DU JEUDI ET QUE JE SOULÈTAI DONC UNE NOUVELLE FOI. ========== à la Demande d'Un Député English, Monsieur Doltelau, une éjàle introduite; Elle est une résolution des signatures de la Récolté de nombros
l = {[en préposé, je souille que nous observions une minute de silence. Madame la Présidente, c'est une motion de procédre. VOUS AVEZ PROBABLEMENT APPRIS PRESSE QU DES CROMES INCLONDES ONT ÉTÉPÉTÉRÉES AU SRI LANKA.], [QUESTION MA PORTE SUR UN SUJET QUI EST À L'ORDRE DU JEUDI ET QUE JE SOULÈVEAI DONC UNE NOUVELLE FOI.], [ La Demande d'Un Député English, Monsieur Doltelau, une déjuité Ajàle Introduite; Elle est une signature de Récolté de nombreux Dont la Mienne.]}
Changer [d [Word] .append (i) pour mot en ligne] code> à [d [word] .append (i) pour mot en ligne.split ()] code>
Ça marche ! Étonnante ! Juste un autre problème HAHA: Avez-vous une fonction pour ignorer les symboles comme: "(". "."? Parce que l'algorithme suppose "(situation" et "situation" comme deux mots distincts ".
La solution rapide consiste à utiliser [d [word] .append (i) pour mot dans re.findall ("\ w +", ligne)] code>, de toute façon, je suggère de regarder des packages comme NLTK.org si votre projet est à propos de l'analyse de texte
Merci beaucoup, c'est gentil de votre part
Ceci est le code que j'ai jusqu'à présent: Il semble fonctionner, mais les clés sont les lettres et les valeurs sont les sublistes où la lettre se produise p> p>
{BLABLABLA: 1, BLABLILOU: 1, BLABLABLOUCH: 2, BLIBLOUBLA: 2, OUBABABABABA: 3, Baboulila: 3} Code> semble un {Word: Count} Dictionary. Est-ce?Qu'entendez-vous par «mot: dictionnaire de compte»?
Dans
Blablabla: 1 Code>, qu'est-ce que1 code> représente?En fait, je sais comment créer un dictionnaire de compte de mots, mais mon problème est que je dois la combiner avec la liste précédente que j'ai créée (cela pourrait être quelque chose qui ne va pas avec elle)
J'ai: [[[Blablabla BlaBliblou] [Blablablou Blibloubla] [Oubabababa Baboulila]] Alors le "1" de Blablabla: 1 signifie que blablabla est dans le numéro subliste 1
d'accord maintenant je comprend
Mais ce serait blablabla: 0 en fait au lieu de 1, c'est mon erreur
Avez-vous vérifié la réponse que j'ai postée, répond-il à vos spécifications?
Je viens de le voir, je vais faire: merci beaucoup pour vous répondre! Je vous ferai savoir