2016-03-22 13 views
0

Gegeben Liste A:Python Teilstring Mapping Wert aus der Liste

['cheese', 'spam', 'sausage', 'eggs'] 

und Liste B:

['cz', 'sp', 'sg', 'eg'] 

ich möchte den Code aus Liste B für eine Zeichenfolge erhalten, die ein Wort aus Liste A.

Ie für eine Zeichenfolge wie something about cheese Ich möchte den Code cz aus Liste B erhalten. Es ist garantiert, dass nur ein Element aus der Liste A in der Eingabezeichenfolge auftritt.

Wie kann dies erreicht werden, ohne für jede Bedingung zu prüfen? I.e. Was wäre ein besserer Weg, es zu tun statt:

for i, key in enumerate(list_a): 
    if key in s: 
     return list_b[i] 
for key, value in zip(list_a, list_b): 
    if key in s: 
     return value 
+2

Verwenden Sie einen Wörterbuch – MattDMo

+0

'für a, b in zip (listA, ListeB): Wenn eine in s: Rückkehr b' – khelwood

Antwort

3

zip sie zusammen

oder

und durchlaufen:

s = 'something about cheese' 

if 'cheese' in s: 
    return 'cz' 
if 'spam' in s: 
    return 'sp' 
if 'sausage' in s: 
    return 'sg' 
... 
1
mapping = { 
    'cheese': 'cz', 
    'spam': 'sp', 
    'sausage': 'sg', 
    'eggs': 'eg' 
} 

s = 'something about cheese' 

for key, value in mapping.iteritems(): 
    if key in s: 
     return value 
1

Warum so etwas wie dieses nicht verwenden das A bis eins in der Zeichenfolge ist. Dann kehrt die entsprechende B.

def foo(someString, listA, listB): 
    for a,b in zip(listA, listB): 
     if a in someString: 
      return b 

someString = "something about cheese" 
listA = ['cheese', 'spam', 'sausage', 'eggs'] 
listB = ['cz', 'sp', 'sg', 'eg'] 
print(foo(someString, listA, listB)) # => cz 
0
List_A = ['cheese', 'spam', 'sausage', 'eggs'] 
List_B = ['cz', 'sp', 'sg', 'eg'] 

s = 'something about cheese' 

SplitWordsList = s.split (" ") # Separate the words in the sentence 

for SplitWord in SplitWordsList : 
    if (SplitWord in List_A) : 
     return (List_B [ List_A.index (SplitWord) ]) 
     break 
Verwandte Themen