7 Stimmen

Python Map Liste von Strings zu Integer Liste

Nehmen wir an, ich habe eine Liste

l = ['michael','michael','alice','carter']

Ich möchte sie wie folgt zuordnen:

k = [1,1,2,3]

Dabei entspricht Michael der Ziffer 1, Alice der Ziffer 2 usw. Gibt es eine Funktion in Python, mit der sich dies leicht bewerkstelligen lässt?

1voto

Kimvais Punkte 36440

Die Funktion ist zip

z.B:

>>> l = ['a','b','a','c']
>>> k = [1,2,1,3]¨
>>> zip(l,k)
[('a', 1), ('b', 2), ('a', 1), ('c', 3)]

Wenn Sie die Elemente von l als Index, Sie wollen ein Wörterbuch:

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

0voto

WeaselFox Punkte 7130

Kann es ziemlich einfach ohne eine Funktion tun:

j - list()    
for i in range (len(l)) : 
   j.append((l[i],k[i]))

0voto

buzypi Punkte 1502

Aus Ihrer Frage geht nicht klar hervor, ob Sie k auf der Grundlage von l erzeugen wollen oder ob sowohl l als auch k gegeben sind.

Wenn Sie k auf der Grundlage von l erstellen wollen, sollte die Antwort von @mathematical.coffee ausreichen.

Wenn Sie eine Zuordnung von Elementen in l zu k wünschen, müssen Sie natürlich Ihre Elemente in l sollte einzigartig sein.

Sehen Sie nach, ob dies das ist, wonach Sie gesucht haben

dict((l[index], k[index]) for index in range(len(l)))

Oder aber, wenn Sie nach Tupeln suchen:

[(l[index], k[index]) for index in range(len(l))]

0voto

marcellosch Punkte 1

Wenn Sie sich nicht um die Reihenfolge der zugewiesenen IDs kümmern, funktioniert dies:

# create unique list of  names
unique_l = set(l)

# create mappings from names to id
name2id = {name: idx+1 for idx, name in enumerate(unique_l)}

# map initial list of names to ids
k = [name2id[name] for name in l]

Sortie :

[2, 2, 1, 3]

0voto

Fengyi Li Punkte 36

Wenn es Ihnen nichts ausmacht, die Kartierungsbeschränkung zu verpassen, ist dies wahrscheinlich eine weitere gute Möglichkeit, dies zu tun.

import numpy as np
names, tags = np.unique(l, return_inverse=True)

print(names)  # ['alice' 'carter' 'michael']
print(tags)   # [2, 2, 0, 1]

Ich hoffe, dies kann in Zukunft helfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X