2 votes

Obtenez tous les premiers éléments de tout contenu inconnu en dictée

J'ai des dictionnaires imbriqués comme celui-ci :

results={
    0: {'id': 87535653, 'cc': 0, 'cover': 89, 'grid': 'VQ'},
    1: {'id': 31213450, 'cc': 0, 'cover': 99, 'grid': 'VQ'},
    2: {'id': 22343446, 'cc': 0.1, 'cover': 79, 'grid': 'VP'},
    3: {'id': 34568756, 'cc': 0, 'cover': 34, 'grid': 'VQ'},
    4: {'id': 43532251, 'cc': 0.2, 'cover': 78, 'grid': 'DS'},
    5: {'id': 42532376, 'cc': 23, 'cover': 90, 'grid': 'ZF'},
}

Ce que je veux, c'est obtenir uniquement le premier élément de n'importe quel contenu de la liste. grid . Donc, pour cet exemple, je veux récupérer ceci :

results={
    0: {'id': 87535653, 'cc': 0, 'cover': 89, 'grid': 'VQ'},
    2: {'id': 22343446, 'cc': 0.1, 'cover': 79, 'grid': 'VP'},
    4: {'id': 43532251, 'cc': 0.2, 'cover': 78, 'grid': 'DS'},
    5: {'id': 42532376, 'cc': 23, 'cover': 90, 'grid': 'ZF'},
}

Le défi : je ne connais pas le contenu de Grid avant. En d'autres termes, tout peut s'y trouver et je ne peux pas itérer en fonction du contenu spécifique. Le code doit reconnaître indépendamment qu'il s'agit d'un élément qui n'existe pas encore avec ce contenu.

Comment puis-je itérer sur les fichiers pour obtenir le résultat que je veux ?

2voto

Ron Serruya Points 651

Vous pouvez itérer sur le dict et marquer chaque grille que vous avez trouvée, de cette façon, la prochaine fois que vous la trouverez, vous ne l'ajouterez pas au dict final.

In [1]: results={
   ...:     0: {'id': 87535653, 'cc': 0, 'cover': 89, 'grid': 'VQ'},
   ...:     1: {'id': 31213450, 'cc': 0, 'cover': 99, 'grid': 'VQ'},
   ...:     2: {'id': 22343446, 'cc': 0.1, 'cover': 79, 'grid': 'VP'},
   ...:     3: {'id': 34568756, 'cc': 0, 'cover': 34, 'grid': 'VQ'},
   ...:     4: {'id': 43532251, 'cc': 0.2, 'cover': 78, 'grid': 'DS'},
   ...:     5: {'id': 42532376, 'cc': 23, 'cover': 90, 'grid': 'ZF'},
   ...: }

In [2]: final_dict = {}

In [3]: _collected_grids = set()

In [4]: for key, value in results.items():
   ...:     if value['grid'] not in _collected_grids:
   ...:         final_dict[key] = value
   ...:         _collected_grids.add(value['grid'])
   ...:

In [5]: final_dict
Out[5]:
{0: {'id': 87535653, 'cc': 0, 'cover': 89, 'grid': 'VQ'},
 2: {'id': 22343446, 'cc': 0.1, 'cover': 79, 'grid': 'VP'},
 4: {'id': 43532251, 'cc': 0.2, 'cover': 78, 'grid': 'DS'},
 5: {'id': 42532376, 'cc': 23, 'cover': 90, 'grid': 'ZF'}}

1voto

balderman Points 12404

Voir ci-dessous (l'idée est de garder une "note" des données de la grille que vous avez déjà scannées)

results = {
    0: {'id': 87535653, 'cc': 0, 'cover': 89, 'grid': 'VQ'},
    1: {'id': 31213450, 'cc': 0, 'cover': 99, 'grid': 'VQ'},
    2: {'id': 22343446, 'cc': 0.1, 'cover': 79, 'grid': 'VP'},
    3: {'id': 34568756, 'cc': 0, 'cover': 34, 'grid': 'VQ'},
    4: {'id': 43532251, 'cc': 0.2, 'cover': 78, 'grid': 'DS'},
    5: {'id': 42532376, 'cc': 23, 'cover': 90, 'grid': 'ZF'},
}

grids = set()
data = dict()
for k, v in results.items():
    if v['grid'] not in grids:
        data[k] = v
        grids.add(v['grid'])
for k, v in data.items():
    print(f'{k} {v}')

sortie

0 {'id': 87535653, 'cc': 0, 'cover': 89, 'grid': 'VQ'}
2 {'id': 22343446, 'cc': 0.1, 'cover': 79, 'grid': 'VP'}
4 {'id': 43532251, 'cc': 0.2, 'cover': 78, 'grid': 'DS'}
5 {'id': 42532376, 'cc': 23, 'cover': 90, 'grid': 'ZF'}

1voto

IoaTzimas Points 8393

Vous pouvez le faire avec les Pandas :

import pandas as pd    
df=pd.DataFrame.from_dict(results, orient='index')
df=df.drop_duplicates('grid')
res = df.to_dict(orient='index')

>>>print(res)
{0: {'id': 87535653, 'cc': 0.0, 'cover': 89, 'grid': 'VQ'}, 
2: {'id': 22343446, 'cc': 0.1, 'cover': 79, 'grid': 'VP'}, 
4: {'id': 43532251, 'cc': 0.2, 'cover': 78, 'grid': 'DS'}, 
5: {'id': 42532376, 'cc': 23.0, 'cover': 90, 'grid': 'ZF'}}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X