Python: unicité pour la liste des listes

je suis curieuse de savoir ce que serait un effient façon de uniquefying ces objets de données:

testdata =[ ['9034968', 'ETH'], ['14160113', 'ETH'], ['9034968', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15724032', 'ETH'], ['15481740', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['10307528', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['15481740', 'ETH'], ['15379365', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15379365', 'ETH']
]

pour chaque paire de données, la chaîne numérique gauche PLUS le type à droite indique l'unicité d'un élément de données. Et il renvoie une liste de listes comme les données de test, mais seules les uniques existent.

Cordialement

30
demandé sur Hellnar 2010-09-16 11:29:00

3 réponses

Vous pouvez utiliser un jeu:

unique_data = [list(x) for x in set(tuple(x) for x in testdata)]

Vous pouvez aussi voir cette page qui repère une variété de méthodes qui préservent ou ne préservent pas l'ordre.

63
répondu Mark Byers 2010-09-16 07:30:11

j'ai essayé la réponse de @Mark et j'ai eu une erreur. La conversion de la liste et de chaque élément en un tuple a fonctionné. Vous ne savez pas si ce la meilleure façon.

list(map(list, set(map(lambda i: tuple(i), testdata))))

bien sûr, la même chose peut être exprimée en utilisant une liste de compréhension à la place.

[list(i) for i in set(tuple(i) for i in testdata)]

j'utilise Python 2.6.2.

mise à Jour

@Mark a depuis changé sa réponse. Sa réponse actuelle utilise des tuples et fonctionnera. Il en sera de mine :)

mise à jour 2

Merci à @Mark. J'ai changé ma réponse à retourner une liste de listes, plutôt qu'une liste de tuples.

8
répondu Manoj Govindan 2010-09-16 08:20:36
import sets
testdata =[ ['9034968', 'ETH'], ['14160113', 'ETH'], ['9034968', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15724032', 'ETH'], ['15481740', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['10307528', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['15481740', 'ETH'], ['15379365', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15379365', 'ETH']]
conacatData = [x[0] + x[1] for x in testdata]
print conacatData
uniqueSet = sets.Set(conacatData)
uniqueList = [ [t[0:-3], t[-3:]] for t in uniqueSet]
print uniqueList
1
répondu pyfunc 2010-09-16 07:43:50