2011-06-08 2 views
1
d1 = ({'x':1, 'y':2}, {'x':3, 'y':4}) 
d2 = ({'x':1, 'y':2}, {'x':5, 'y':6}, {'x':1, 'y':6, 'z':7}) 

J'ai deux tuple d1 et d2. Je sais que les tuples sont immutable. Je dois donc ajouter un autre tuple en utilisant la liste. Y a-t-il une meilleure solution?Comment ajouter et uniqify un tuple

La question suivante est comment uniformiser un tuple sur les touches dites 'x'. si 'x': 1 dans les touches vient deux fois c'est dulicate.

append_tuple = ({'x':1, 'y':2}, {'x':5, 'y':6}, {'x':1, 'y':6, 'z':7}, {'x':1, 'y':2}, {'x':3, 'y':4}) 

unique_tuple = ({'x':1, 'y':2}, {'x':3, 'y':4}, {'x':5, 'y':6}) 

Remarque: Je veux retirer l'élément double d'un tuple de dict si les valeurs clés dire « x » a enregistrer la valeur dans deux dict alors ceux-ci sont en double élément.

+0

Pouvez-vous nous donner un peu plus de contexte pour ce que vous essayez de faire? –

+0

La deuxième partie semble être une copie de http://stackoverflow.com/questions/3665414/how-to-uniqufy-the-tuple-element – Chowlett

+0

Je souhaite supprimer l'élément en double d'un tuple de dict si les valeurs clés indiquent 'x 'a la valeur de sauvegarde dans deux dict puis ce sont des éléments en double. –

Répondre

2
  1. Il n'existe pas de meilleure façon d'étendre un tuple. Je dirais que si vous faites constamment cela, vous devez migrer loin d'un tuple, ou changer votre conception.

  2. Encore une fois, il semble que vous utilisiez le mauvais type de collection. Mais vous pouvez supprimer les clés dupliquées du dictionnaire en utilisant l'existant SO répondre How to uniqufy the tuple element?

2

Tuples sont généralement pour les données où le nombre d'éléments est fixe et chaque lieu a sa propre « sens », donc les choses comme le tri, ajouter, et supprimer les doublons ne sera jamais très naturel sur les tuples et ne sont pas conçus pour être. Si vous êtes coincé avec des tuples, que vous convertissez en liste, que vous effectuez ces opérations, la conversion est tout à fait raisonnable.

Pour annexant, vous feriez:

d1 += (ITEM,) 

et prolongez, vous devriez juste faire:

d1 += d2 

Pour uniquifying:

unique_list = [] 
for i1 in append_tuple: 
    if not any((k,v) in i2.items() for (k,v) in i1.items() for i2 in unique_list): 
     unique_list.append(i1) 
unique_tuple = tuple(unique_list) 

Il peut sembler il y a une solution plus concise/élégante, mais ce que vous essayez de faire est assez spécifique, et pour ce genre de choses, il vaut mieux être explicite et construire la liste dans une boucle for que d'essayer de le forcer à une compréhension ou similaire.

+0

Si vous ajoutez simplement les tuples ensemble, pourquoi convertir en liste? d1 = d1 + d2 fonctionne très bien, et d'ailleurs d1 + = d2. – DSM

+0

@DSM: bon appel. Je me suis souvenu que les tuples agissaient bizarrement quand on les ajoutait, mais je suppose que c'est bc que je m'attends généralement à ce que l'ajout de tuple soit pairwise. Édité. –

Questions connexes