6
votes

Python Carte Liste des chaînes à la liste des entiers

Disons que j'ai une liste xxx

Je veux mapper sur les suivantes: xxx

où Michael correspond à 1, Alice correspond à 2 etc. Y a-t-il une fonction dans Python pour le faire facilement?


0 commentaires

10 Réponses :


1
votes

La fonction est zip

>>> d = dict(zip(l,k))
>>> d
{'a': 1, 'c': 3, 'b': 2}
>>> d['a']
1
>>> d['c']
3
>>> 


1 commentaires

ZIP ne vérifie pas la correspondance, si K est inversé, les résultats seront différents.



0
votes

peut le faire assez facile sans fonction: xxx


0 commentaires

0
votes

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 l doivent être uniques.

Voir si c'est ce que vous cherchiez Pour xxx

ou d'autre, si vous recherchez des tuples: xxx


0 commentaires

12
votes

Jetez un coup d'œil à ord , qui donne le numéro Unicode pour Un caractère donné: xxx

afin que vous puissiez faire ord (x) -96 pour convertir az sur 1-26 < / Code> (prudent de majuscule, etc.). xxx

à nouveau, prudent sur les caractères majuscules et non alphabet.


3 commentaires

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.



2
votes

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]


0 commentaires

4
votes

Pour cartographier la liste des entiers à la liste des chaînes Je voudrais utiliser un dictionnaire, par exemple: xxx

Notez que len (nom_number) est 3 , car les clés en double ne sont pas autorisées.


0 commentaires

5
votes

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]


0 commentaires

5
votes

Que diriez-vous d'utiliser des pandas?

import pandas as pd
l = ['michael','michael','alice','carter']
pd.Series(l).astype('category').cat.codes.values


0 commentaires

0
votes

Si vous ne vous souciez pas de l'ordre des identifiants attribués, cela fonctionne:

[2, 2, 1, 3]


0 commentaires

0
votes

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]


0 commentaires