2017-10-10 3 views
0

Je les gars! J'ai essayé d'écrire un programme Python-3 qui compare si les clés d'une liste de tuples apparaissent plus de trois fois.Comparer (plusieurs) clés dans une liste de tuples Python

Voici un exemple de ma liste:

my_list = [('Configs', 98602471), 
    ('Linux_Server', 10137300), 
    ('Job-1', 10137300), 
    ('Job-2', 10137300), 
    ('Job-3', 10137300), 
    ('Catalog', 10256456), 
    ('Configs', 98602471), 
    ('Linux_Server', 100), 
    ('Job-1', 101), 
    ('Job-2', 102), 
    ('Job-3', 103), 
    ('Catalog', 10277555), 
    ('Configs', 98602471), 
    ('Linux_Server', 100), 
    ('Job-1', 104), 
    ('Job-2', 105), 
    ('Job-3', 106), 
    ('Catalog', 10297994)] 

La liste ci-dessus représentent le nom du travail de la Baculas et la taille de la tâche (en octets).

Voici ma tentative:

from collections import defaultdict 

d = defaultdict(list) 
for k, v in my_list: 
    d[k].append(v) 

for key, d in d.items(): 
    print(key, d) 

Et ceci est le résultat:

Job-3 [10137300, 103, 106] 

Job-1 [10137300, 101, 104] 

Catalog [10256456, 10277555, 10297994] 

Configs [98602471, 98602471, 98602471] 

Linux_Server [10137300, 100, 100] 

Job-2 [10137300, 102, 105] 

Je vais avoir besoin que les résultats me montre que le travail (ou emplois) que leur taille est la même plus de trois fois. Par exemple, dans ce cas, je vais avoir besoin que seulement imprimer pour moi ce qui suit:

Configs [98602471, 98602471, 98602471] 

Comme vous pouvez le voir ci-dessus, la taille() du travail « Configs » est la même au moins trois fois.

Je ne sais pas si je me fais clair.

Comment est-ce que je peux faire ceci?

Merci!

Répondre

0

Ce que vous semblez vraiment vouloir faire est de compter les paires dans votre liste. Vous pouvez utiliser l'objet Counter pour cela, puis parcourir les touches pour trouver les objets dont le nombre n'est pas inférieur à trois.

my_list = [('Configs', 98602471), 
    ('Linux_Server', 10137300), 
    ('Job-1', 10137300), 
    ('Job-2', 10137300), 
    ('Job-3', 10137300), 
    ('Catalog', 10256456), 
    ('Configs', 98602471), 
    ('Linux_Server', 100), 
    ('Job-1', 101), 
    ('Job-2', 102), 
    ('Job-3', 103), 
    ('Catalog', 10277555), 
    ('Configs', 98602471), 
    ('Linux_Server', 100), 
    ('Job-1', 104), 
    ('Job-2', 105), 
    ('Job-3', 106), 
    ('Catalog', 10297994)] 

from collections import Counter 

counts = Counter(my_list) 

for count in counts: 
    if counts[count]>=3: 
     print (count, counts[count]) 

Résultat:

('Configs', 98602471) 3 
+0

Oui! Merci Bill Bell. C'est tout !!!! –

+0

De rien, Flavio. –

0

On suppose qu'il pourrait être possible de factoriser:

for key, d in d.items(): 
    print(key, d) 

dans

for key, d in d.items(): 
    if len(set(d)) + 1 < len(d): 
     print(key, d) 

Il est évident que c'est la solution pour le cas où une seule élément dans le liste doublons plus de trois fois, et il ne fonctionne pas correctement lorsque plusieurs éléments sont les mêmes plusieurs fois:

[22, 22, 11, 11] # not appropriate list view