Je suis curieux de savoir quel serait un moyen efficace de personnaliser de tels 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 de gauche PLUS le type à droite indiquent l'unicité d'un élément de données. Et il retourne une liste de listes identiques à celles de testdata, mais seuls les uniques sont existants.
Cordialement
Vous pouvez utiliser un ensemble:
unique_data = [list(x) for x in set(Tuple(x) for x in testdata)]
Vous pouvez également voir cette page qui référence une variété de méthodes qui préservent ou non l'ordre.
J'ai essayé la réponse de @ Mark et j'ai eu une erreur. La conversion de la liste et de chacun des éléments en un tuple a permis son bon fonctionnement. Je ne sais pas si c'est le meilleur moyen cependant.
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.
[list(i) for i in set(Tuple(i) for i in testdata)]
J'utilise Python 2.6.2.
Mettre à jour
@Mark a depuis changé sa réponse. Sa réponse actuelle utilise des tuples et fonctionnera. Alors le mien :)
Mise à jour 2
Merci à @Mark. J'ai changé ma réponse pour retourner une liste de listes plutôt qu'une liste de n-uplets.
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
En développant un peu la solution @Mark Byers , vous pouvez également faire une compréhension et une conversion de liste pour obtenir ce dont vous avez besoin:
testdata = list(set(Tuple(x) for x in testdata))
De plus, si vous n'aimez pas les compréhensions de liste car beaucoup les trouvent déroutantes, vous pouvez faire la même chose dans une boucle for:
for i, e in enumerate(testdata):
testdata[i] = Tuple(e)
testdata = list(set(testdata))
si vous avez une liste d'objets que vous pouvez modifier, répondez à @Mark Byers:
unique_data = [list(x) for x in set(Tuple(x.testList) for x in testdata)]
où testdata est une liste d'objets ayant une liste testList en tant qu'attribut.