Seite 1 von 1

Werte aus einer Liste extrahieren

Verfasst: Dienstag 1. Februar 2022, 23:12
von Lena97
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

Re: Werte aus einer Liste extrahieren

Verfasst: Dienstag 1. Februar 2022, 23:51
von __blackjack__
@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']