Werte aus einer Liste extrahieren

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
Lena97
User
Beiträge: 2
Registriert: Dienstag 1. Februar 2022, 19:15

Hallo zusammen,

ich habe neulich begonnen mit der Programmiersprache Python und habe ein Problem, und zwar schaffe ich es leider nicht, die Werte von dem Schlüssel "Term" aus folgender Liste zu extrahieren:

Code: Alles auswählen

list = [{'metaData': {'apiVersion': '0.2',
                  'warning': 'ACHTUNG: Bitte vor ernsthafter Nutzung feedback@openthesaurus.de kontaktieren, um bei API-Änderungen informiert zu werden',
                  'copyright': 'Copyright (C) 2021 Daniel Naber (www.danielnaber.de)',
                  'license': 'Creative Commons Attribution-ShareAlike 4.0 or GNU LESSER GENERAL PUBLIC LICENSE Version 2.1',
                  'source': 'https://www.openthesaurus.de',
                  'date': 'Tue Feb 01 17:03:04 CET 2022'},
     'synsets': [{'id': 12555,
                  'categories': ['Technik'],
                  'terms': [{'term': 'Schraube'}]},
                 {'id': 19731,
                  'categories': [],
                  'terms': [{'term': 'Helix'},
                            {'term': 'Schraube'},
                            {'term':'Schraubenlinie'},
                            {'term': 'Wendel'},
                            {'term': 'zylindrische Spirale'}]}]},
    {'metaData': {'apiVersion': '0.2',
                  'warning': 'ACHTUNG: Bitte vor ernsthafter Nutzung feedback@openthesaurus.de kontaktieren, um bei API-Änderungen informiert zu werden',
                  'copyright': 'Copyright (C) 2021 Daniel Naber (www.danielnaber.de)',
                  'license': 'Creative Commons Attribution-ShareAlike 4.0 or GNU LESSER GENERAL PUBLIC LICENSE Version 2.1', 
                  'source': 'https://www.openthesaurus.de',
                  'date': 'Tue Feb 01 17:03:04 CET 2022'},
     'synsets': [{'id': 7844,
                  'categories': [],
                  'terms': [{'term': 'Mauer'},
                            {'term': 'Wall'},
                            {'term': 'Wand'}]},
                 {'id': 46391,
                  'categories': ['Architektur'],
                  'terms': [{'term': 'Gemäuer'},
                            {'term': '(alte gemauerte) Wand'}]}]}]
Das Ergebnis sollte dann eine solche Liste sein:
Ergebnis = ["Schraube, Schraubenlinie, Wendel, zylindrische Spirale", "Mauer, Wall, Wand, Gemäuer, (alte gemauerte) Wand"]
Viele Grüße
Lena
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Lena97: Nach welchen Kriterien sollen denn die Worte (nicht) verwendet werden? Also warum ist "Helix" *nicht* enthalten?

Wo ist das konkrete Problem?

Lösung mit der `glom`-Bibliothek (falls "Helix" auch im Ergebnis sein soll):

Code: Alles auswählen

#!/usr/bin/env python3
from pprint import pprint

from glom import glom, Merge


def main():
    target = [
        {
            "metaData": {
                "apiVersion": "0.2",
                "warning": "ACHTUNG: Bitte vor ernsthafter Nutzung feedback@openthesaurus.de kontaktieren, um bei API-Änderungen informiert zu werden",
                "copyright": "Copyright (C) 2021 Daniel Naber (www.danielnaber.de)",
                "license": "Creative Commons Attribution-ShareAlike 4.0 or GNU LESSER GENERAL PUBLIC LICENSE Version 2.1",
                "source": "https://www.openthesaurus.de",
                "date": "Tue Feb 01 17:03:04 CET 2022",
            },
            "synsets": [
                {
                    "id": 12555,
                    "categories": ["Technik"],
                    "terms": [{"term": "Schraube"}],
                },
                {
                    "id": 19731,
                    "categories": [],
                    "terms": [
                        {"term": "Helix"},
                        {"term": "Schraube"},
                        {"term": "Schraubenlinie"},
                        {"term": "Wendel"},
                        {"term": "zylindrische Spirale"},
                    ],
                },
            ],
        },
        {
            "metaData": {
                "apiVersion": "0.2",
                "warning": "ACHTUNG: Bitte vor ernsthafter Nutzung feedback@openthesaurus.de kontaktieren, um bei API-Änderungen informiert zu werden",
                "copyright": "Copyright (C) 2021 Daniel Naber (www.danielnaber.de)",
                "license": "Creative Commons Attribution-ShareAlike 4.0 or GNU LESSER GENERAL PUBLIC LICENSE Version 2.1",
                "source": "https://www.openthesaurus.de",
                "date": "Tue Feb 01 17:03:04 CET 2022",
            },
            "synsets": [
                {
                    "id": 7844,
                    "categories": [],
                    "terms": [
                        {"term": "Mauer"},
                        {"term": "Wall"},
                        {"term": "Wand"},
                    ],
                },
                {
                    "id": 46391,
                    "categories": ["Architektur"],
                    "terms": [
                        {"term": "Gemäuer"},
                        {"term": "(alte gemauerte) Wand"},
                    ],
                },
            ],
        },
    ]

    spec = [
        (
            "synsets",
            Merge([("terms", ["term"])], set),
            sorted,
            ", ".join,
        )
    ]
    pprint(glom(target, spec))


if __name__ == "__main__":
    main()
Ausgabe:

Code: Alles auswählen

['Helix, Schraube, Schraubenlinie, Wendel, zylindrische Spirale',
 '(alte gemauerte) Wand, Gemäuer, Mauer, Wall, Wand']
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten