En supposant que j'ai ce dictionnaire dans une liste:

 [
    {
        "Name": "Person",
        "Confidence": 97.56156921386719,
        "Instances": [
            {
                "BoundingBox": {
                    "Width": 0.6137702465057373,
                    "Height": 0.9175498485565186,
                    "Left": 0.22297996282577515,
                    "Top": 0.0739903450012207
                },
                "Confidence": 94.51961517333984
            },
            {
                "BoundingBox": {
                    "Width": 0.46570318937301636,
                    "Height": 0.6405649781227112,
                    "Left": 0.11447866261005402,
                    "Top": 0.34079012274742126
                },
                "Confidence": 82.2153549194336
            }
        ],
        "Parents": []
    },
    {
        "Name": "Human",
        "Confidence": 97.56156921386719,
        "Instances": [],
        "Parents": []
    },
    {
        "Name": "Clothing",
        "Confidence": 91.08417510986328,
        "Instances": [],
        "Parents": []
    }
    }]

Comment puis-je récupérer le dictionnaire avec la valeur clé "Name": "Clothing" uniquement? est-il possible de le récupérer dans le dictionnaire? La clé "Vêtements" peut apparaître dans n'importe quelle partie de la liste.

    {
        "Name": "Clothing",
        "Confidence": 91.08417510986328,
        "Instances": [],
        "Parents": []
    }
  
2
Led 28 oct. 2020 à 04:55

4 réponses

Meilleure réponse

Le .get(Key, defaultValue) peut être utilisé ici.

.get("Name", "") -> Renvoie une chaîne vide si la clé Name n'existe pas dans le dictionnaire. doc .get("Name") -> Renvoie None si Name n'existe pas.

Donc .get("Name") == "Clothing" est le critère de sélection d'un dictionnaire.

Et utilisez filter () pour ne choisir que ceux qui satisfont aux critères.

Mettre tous ensemble

filter(lambda x: x.get("Name") == "Clothing", mylist)

Filter renvoie un itérateur, vous pouvez donc le transmettre à list pour créer une liste complète. Si vous voulez simplement le parcourir, inutile d'appeler la liste.

Donc,

list(filter(lambda x: x.get("Name") == "Clothing", mylist))
2
algrebe 28 oct. 2020 à 02:11

Vous pouvez utiliser le code suivant pour obtenir chaque élément ayant Name sur Clothing:

names = [
    {
        "Name": "Person",
        "Confidence": 97.56156921386719,
        "Instances": [
            {
                "BoundingBox": {
                    "Width": 0.6137702465057373,
                    "Height": 0.9175498485565186,
                    "Left": 0.22297996282577515,
                    "Top": 0.0739903450012207
                },
                "Confidence": 94.51961517333984
            },
            {
                "BoundingBox": {
                    "Width": 0.46570318937301636,
                    "Height": 0.6405649781227112,
                    "Left": 0.11447866261005402,
                    "Top": 0.34079012274742126
                },
                "Confidence": 82.2153549194336
            }
        ],
        "Parents": []
    },
    {
        "Name": "Human",
        "Confidence": 97.56156921386719,
        "Instances": [],
        "Parents": []
    },
    {
        "Name": "Clothing",
        "Confidence": 91.08417510986328,
        "Instances": [],
        "Parents": []
    }
]

for name in names:
    if name['Name'] == 'Clothing':
        print(name)

Si vous voulez qu'il soit court, vous pouvez utiliser le code suivant:

x = [y for y in names if name['Name'] == 'Clothing']
2
Abhigyan Jaiswal 28 oct. 2020 à 02:01

Vous pouvez utiliser ce simple list comprehension:

[print(dictionary) for dictionary in lst if 'Name' in dictionary.keys() and dictionary['Name'] == 'Clothing']

Production:

{'Name': 'Clothing', 'Confidence': 91.08417510986328, 'Instances': [], 'Parents': []}

Voici le code complet:

lst =  [
    {
        "Name": "Person",
        "Confidence": 97.56156921386719,
        "Instances": [
            {
                "BoundingBox": {
                    "Width": 0.6137702465057373,
                    "Height": 0.9175498485565186,
                    "Left": 0.22297996282577515,
                    "Top": 0.0739903450012207
                },
                "Confidence": 94.51961517333984
            },
            {
                "BoundingBox": {
                    "Width": 0.46570318937301636,
                    "Height": 0.6405649781227112,
                    "Left": 0.11447866261005402,
                    "Top": 0.34079012274742126
                },
                "Confidence": 82.2153549194336
            }
        ],
        "Parents": []
    },
    {
        "Name": "Human",
        "Confidence": 97.56156921386719,
        "Instances": [],
        "Parents": []
    },
    {
        "Name": "Clothing",
        "Confidence": 91.08417510986328,
        "Instances": [],
        "Parents": []
    }
]

[print(dictionary) for dictionary in lst if 'Name' in dictionary.keys() and dictionary['Name'] == 'Clothing']
1
Sushil 28 oct. 2020 à 02:00

En supposant que votre liste s'appelle my_list, cela devrait vous donner ce que vous voulez:

my_list_new = [x for x in my_list if ("Name", "Clothing") in x.items()]

-1
Amir 28 oct. 2020 à 02:00