Ich versuche, Zeichenfolgen in eine Liste innerhalb eines Wörterbuchs einzufügen, damit jeder Teilnehmer eine Liste mit Wörtern hat. Hier ist mein Code:

words = [
    {'word': 'we', 'start_time': 90, 'participant': 'str_MIC_Y6E6_con_VnGhveZbaS'},
    {'word': "haven't", 'start_time': 91, 'participant': 'str_MIC_Y6E6_con_VnGhveZbaS'},
    {'word': 'even', 'start_time': 91, 'participant': 'str_MIC_Y6E6_con_VnGhveZbaS'},
    {'word': 'spoken', 'start_time': 91, 'participant': 'str_MIC_Y6E6_con_VnGhveZbaS'},
    {'word': 'about', 'start_time': 92, 'participant': 'str_MIC_Y6E6_con_VnGhveZbaS'},
    {'word': 'your', 'start_time': 92, 'participant': 'str_MIC_Y6E6_con_VnGhveZbaS'},
    {'word': 'newest', 'start_time': 92, 'participant': 'str_MIC_Y6E6_con_VnGhveZbaS'},
    {'word': 'some word here', 'start_time': 45, 'participant': 'other user'}
]

words.sort(key=lambda x: x['start_time'])

clean_transcript = []
wordChunk = {'participant': '', 'words': []}
for w in words:
    if wordChunk['participant'] == w['participant']:
        wordChunk['words'].append(w['word'])

    else:
        wordChunk['participant'] = w['participant']
        print(wordChunk['participant'])
        wordChunk['words'].append(w['word'])

clean_transcript.append(wordChunk)

Dies gibt mir dieses Ergebnis:

[{'participant': 'str_MIC_Y6E6_con_VnGhveZbaS', 'words': ['some word here', 'we', "haven't", 'even', 'spoken', 'about', 'your', 'newest']}]

Das some word here befindet sich also in einer falschen Liste. Wie muss ich dies ändern, um auch eine eigene Wortliste für other user zu erstellen?

1
lr_optim 19 Aug. 2020 im 13:28

2 Antworten

Beste Antwort

Sie können Ihre Daten teilweise umstrukturieren und sie einfach in einem Diktat speichern, das Teilnehmer als Schlüssel enthält:

wordChunk = {}
for w in words:
    wordChunk.setdefault(w["participant"],[]).append(w["word"])

WordChunk ist jetzt ein Diktat mit Teilnehmern als Schlüssel:

>>> wordChunk
{'str_MIC_Y6E6_con_VnGhveZbaS': ['we', "haven't", 'even', 'spoken', 'about', 'your', 'newest'], 'other user': ['some word here']}
3
Bendik Knapstad 19 Aug. 2020 im 10:43

Sie können itertools.groupby verwenden

from itertools import groupby

res = []
words = sorted(words, key = lambda x: x['start_time'])
for k, g in groupby(words, key = lambda x: x['participant']):
    d = {'participant': k, 'words': [x['word'] for x in g]} 
    res.append(d)
print(res)

Ausgabe:

[{'participant': 'other user', 'words': ['some word here']}, {'participant': 'str_MIC_Y6E6_con_VnGhveZbaS', 'words': ['we', "haven't", 'even', 'spoken', 'about', 'your', 'newest']}]

Listenverständnis verwenden

res = [{'participant': k, 'words': [x['word'] for x in g]} for k, g in
       groupby(sorted(words, key=lambda x: x['start_time']), key=lambda x: x['participant'])]
1
deadshot 19 Aug. 2020 im 10:54