Efficace de déduplication en Python

0

La question

J'ai codé un peu de code qui attribut à chaque élément d'une liste, d'une note... Pour ce faire, j'ai besoin de le faire (simplifié le code):

group={1:["Jack", "Jones", "Mike"],
       2:["Leo", "Theo", "Jones", "Leo"],
       3:["Tom", "Jack"]}

already_chose=["Tom","Mike"]
result=[]

for group_id in group:
    name_list = group[group_id]
    y=0;x=0
    repeat=[]
    for name in name_list:
        if name in already_chose:
            y+=1
        elif name not in repeat:
            x+=1
            repeat.append(name)
    score_group=x-y
    result.append([group_id,score_group])

sortie: [[1, 1], [2, 3], [3, 0]]

La question est, si vous lisez ce code, qu'il n'est pas optimisé pour un grand énumération (plus de 7000 groupes et 100 noms par groupes)...

J'espère que quelqu'un peut m'aider ? Merci beaucoup

1

La meilleure réponse

3

IIUC, vous voulez obtenir la longueur de l'ensemble des noms uniques pas dans already_chose moins le nombre de noms dans already_chose.

C'est facilement réalisable avec python et d'une compréhension de liste. L'avantage dans l'utilisation de python ensembles, c'est que les opérations sont très rapides en raison de hachage des éléments.

[[k, len(set(v).difference(already_chose))-len(set(v).intersection(already_chose))]
 for k,v in group.items()]

sortie: [[1, 1], [2, 3], [3, 0]]

NB. peut-être plus utile en tant que dictionnaire de compréhension:

{k: len(set(v).difference(already_chose))-len(set(v).intersection(already_chose))
 for k,v in group.items()}

sortie: {1: 1, 2: 3, 3: 0}

2021-11-14 19:21:50

Je ne connaissais pas le jeu().différence() !!!! Thk
BiMathAx STUDIO

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................