Disons que j'ai une liste Je veux mapper sur les suivantes: p> où Michael correspond à 1, Alice correspond à 2 etc. Y a-t-il une fonction dans Python pour le faire facilement? P> P>
10 Réponses :
La fonction est zip
>>> d = dict(zip(l,k)) >>> d {'a': 1, 'c': 3, 'b': 2} >>> d['a'] 1 >>> d['c'] 3 >>>Â
ZIP ne vérifie pas la correspondance, si K est inversé, les résultats seront différents.
peut le faire assez facile sans fonction:
De votre question, il n'est pas clair si vous souhaitez générer K basé sur L ou L et K sont donnés.
Si vous cherchez à créer K basé sur L, @ Réponse de Mathematical.Coffee devrait faire. < / p>
Si vous souhaitez une carte des éléments de L to k, évidemment, vos éléments dans Voir si c'est ce que vous cherchiez Pour p> ou d'autre, si vous recherchez des tuples: p> l code> doivent être uniques. p>
Jetez un coup d'œil à afin que vous puissiez faire à nouveau, prudent sur les caractères majuscules et non alphabet. P> P> ord code>
, qui donne le numéro Unicode pour Un caractère donné: ord (x) -96 code> pour convertir
az code> sur
1-26 < / Code> (prudent de majuscule, etc.). p>
Cela ne fonctionne que pour une liste de caractères, pas pour une liste de chaînes comme dans la question de l'OP.
Notez que la question originale n'avait qu'une liste de caractères. La modification de la question a été faite après que cette réponse ait été donnée et acceptée!
Ah je n'ai pas remarqué ça. Dans ce cas, je souhaite que l'OP ait posé la question «chaîne» comme une question distincte. Merci.
Si je vous lis correctement, vous souhaitez prendre une liste de caractères et les convertir en entiers, avec un être 1, B en étant 2, etc.
l = ['a','b','a','c'] k = [ord(x.upper()) - 64 for x in l]
Pour cartographier la liste des entiers à la liste des chaînes Je voudrais utiliser un dictionnaire, par exemple: Notez que len (nom_number) code> est
3 code>, car les clés en double ne sont pas autorisées. p> p>
Afin de répondre à la question modifiée, c'est-à-dire de cartographier la liste des chaînes à des entiers uniques, il faut d'abord trouver les chaînes uniques, puis faire une cartographie 1-1 des chaînes aux entiers dans la liste originale des chaînes. Par exemple,
k=[1, 1, 2, 3]
Que diriez-vous d'utiliser des pandas?
import pandas as pd l = ['michael','michael','alice','carter'] pd.Series(l).astype('category').cat.codes.values
Si vous ne vous souciez pas de l'ordre des identifiants attribués, cela fonctionne:
[2, 2, 1, 3]
Si cela ne vous dérange pas de manquer la restriction de mappage, c'est probablement un autre bon peut le faire.
import numpy as np names, tags = np.unique(l, return_inverse=True) print(names) # ['alice' 'carter' 'michael'] print(tags) # [2, 2, 0, 1]