Vorkommen von Listenelementen zählen und die Elemente zusammen fassen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

Hallo!
Ich habe bereits eine Hilfe von

bwbg
bekommen. Vielen Dank dafür! Der untere Code gibt aus, welche Wortfolgen von den Wörrtern im lexikon in der Liste basis vorkommen. Unten seht ihr auch die Art der Ausgabe. Ich würde jetzt aber gerne zählen, wie oft welche dieser Wortfolgen auch vorkommen. Also das z.b. "wir gehen:3" da steht und diese Wortfolge auch nur einmal in der Liste genannt wird. Ich probiere gerade das mir Counter zu lösen, komme jedoch nicht so richtig voran....Habt ihr vielleicht eine Idee??

Ihr würdet mir sher weiterhelfen!

Liebe Grüße!


Code: Alles auswählen

#!/usr/bin/env python3
   
def main():
    lexikon = {
        'du': 3, 'morgen': 2, 'Woche': 10, 'und': 20, 'wir': 2,
        'ruhen': 3, 'Sonne': 5, 'Mond': 4,'Sterne': 3
        # Zweites Vorkommen des key 'du' entfernt
    }
    basis = [
        'hallo du', 'hallo ich','hallo du', 'hallo sie', 'wir gehen', 'hallo sie','wir schlafen',
        'wir ruhen','wir gehen', 'du guckst', 'du gehst', 'wir gehen', 'wie heute', 'wie morgen'
    ]
   
    result = {k: [e for e in basis if k in e] for k in lexikon.keys()}
    print(result)
   
if __name__ == '__main__':
    main()


Ausgabe:

Code: Alles auswählen

#!/usr/bin/env python3

   

def main():

    lexikon = {

        'du': 3, 'morgen': 2, 'Woche': 10, 'und': 20, 'wir': 2,

        'ruhen': 3, 'Sonne': 5, 'Mond': 4,'Sterne': 3

        # Zweites Vorkommen des key 'du' entfernt

    }

    basis = [

        'hallo du', 'hallo ich','hallo du', 'hallo sie', 'wir gehen', 'hallo sie','wir schlafen',

        'wir ruhen','wir gehen', 'du guckst', 'du gehst', 'wir gehen', 'wie heute', 'wie morgen'

    ]

   

    result = {k: [e for e in basis if k in e] for k in lexikon.keys()}

    print(result)

   

if __name__ == '__main__':

    main()

{'Mond': [], 'morgen': ['wie morgen'], 'und': [], 'wir': ['wir gehen', 'wir schlafen', 'wir ruhen', 'wir gehen', 'wir gehen'], 'ruhen': ['wir ruhen'], 'du': ['hallo du', 'hallo du', 'du guckst', 'du gehst'], 'Woche': [], 'Sonne': [], 'Sterne': []}

Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

Also mein aktueller Code, der leider nicht funktioniert, sieht so aus:

Code: Alles auswählen

def main():
  
    result = {k: [word for word in basis if k in word] for k in lexikon.keys()}          
    print(result)
    from collections import Counter
    from itertools import chain
    data = result
    counted = Counter(chain.from_iterable(each for each in data))



   
if __name__ == '__main__':
    main()
BlackJack

@Noranora: Natürlich läuft das nicht weil weder `lexicon` noch `basis` definiert sind. ;-)

Das sieht schon wieder nach wild herumgeraten aus. So funktioniert programmieren nicht. Du machst hier den Eindruck als würdest Du mit einer Mischung aus raten und nach Code betteln zu Deinen Lösungen kommen, die Du am Ende aber nicht wirklich verstehst. Lern doch einfach mal *selber* *programmieren*. Statt mehr oder weniger planlos Quelltextschnippsel von anderen solange zu kombinieren/permutieren bis hoffentlich das Ergebnis stimmt.

Hier eine Lösung in Hy:

Code: Alles auswählen

#!/usr/bin/env hy
(import
  [collections [Counter]]
  [functools [partial]])


(defmain [&rest args]
  (let [lexicon
          {"du" 3  "morgen" 2  "Woche" 10  "und" 20  "wir" 2  "ruhen" 3
           "Sonne" 5  "Mond" 4  "Sterne" 3}
        basis
          ["hallo du" "hallo ich" "hallo du" "hallo sie" "wir gehen" "hallo sie"
           "wir schlafen" "wir ruhen" "wir gehen" "du guckst" "du gehst"
           "wir gehen" "wie heute" "wie morgen"]
        in? (fn [a b] (in a b))]
  (print
    (dict
      (genexpr (, k (Counter (filter (partial in? k) basis))) [k lexicon])))))
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

Danke für deine Antwort! Leider funktioniert sie in meiner Ide nicht... Ich bin dabei zu lernen, jedoch ist es schwierig, wenn man an einem Problem hängt und nicht weiterkommt. Daher bin ich auch sehr dankbar, wenn hier Tipps und Hilfen kommen....
BlackJack

@Noranora: Die Lösung ist nicht in Python sondern in Hy, einem Lisp-Dialekt, der in Python geschrieben ist und auf dessen VM läuft.

Dein Problem scheint mir zu sein das Du Dich von einem konkreten Problem das Du lösen musst, zum nächsten hangelst, Dir aber nicht die Zeit nimmst ganz unabhängig von diesen Problemen die Grundlagen, sowohl von der Sprache Python, als auch vom Programmieren zu lernen.
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

Hey!
Ich verstehe diese Zeile einfach nicht: [in? (fn [a b] (in a b))]]

Daher kann ich den Code wahrscheinlich auch nicht richtig umschreiben....
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

Also ich habe es vorerst mit einer einfachen for-schleife gemacht. Leider bin ich nicht wirklich überzeugt davon, aber ich kann erstmal weitermachen...

Code: Alles auswählen

    for i in result.values():
        count=Counter(i)
        print(count)
Danke für eure Antworten!
Antworten