2017-02-22 4 views
1

hey ich habe ein Problem ein Problem Lösung, die wie folgt aussieht:Code-Review: Python-Liste Verkettung Elemente String

der Ausgang ist genau das, was ich brauche, aber ich frage mich, ist es eine elegantere Art und Weise ist nicht zu tun Das?

list = [["key189","0","apples"], 
     ["key622","1","bananas"], 
     ["key233","2","bacon"], 
     ["key454","3","bread"], 
     ["key35","4","jam"], 
     ["key6","5","coffee"]] 

for e in list: 
    if e[0] == "key622": 
     key622 = e[2] 
    if e[0] == "key189": 
     key189 = e[2] 
    if e[0] == "key35": 
     key35 = e[2] 
    if e[0] == "key454": 
     key454 = e[2] 
    if e[0] == "key233": 
     key233 = e[2] 
    if e[0] == "key6": 
      key6 = e[2] 

string_form = "|".join([key6, key35, key233, key189, key622, key454]) 


print(string_form) 
# prints coffee|jam|bacon|apples|bananas|bread 
+3

Ich wähle diese Frage zu schließen, wie Off-Topic, weil diese Frage auf der Schwester-Site gehört [ 'CodeReview' ] (https://codereview.stackexchange.com/) –

+0

Die Reihenfolge Ihres Beitritts ist eher zufällig. – schwobaseggl

+3

Es ist eine sehr schlechte Datenstruktur, die Sie verwenden, ich denke, Ihre _key_ Variablen sind einzigartig, so schlage ich vor, Sie verwenden ein 'Dictionary' – Arman

Antwort

1

Ich denke, dass ein Gebrauch eines Wörterbuchs Ihr l ife leichter.

dt = {itm[0]:itm[2] for itm in list} 

dt wird:

{'key189': 'apples', 
'key233': 'bacon', 
'key35': 'jam', 
'key454': 'bread', 
'key6': 'coffee', 
'key622': 'bananas'} 

string_form = "|".join(dt.values()) 

string_form sein wird:

'coffee|apples|bacon|jam|bananas|bread' 

Sie eine beliebige Taste Wert bekommen: so:

dt.get('key35') 

Für die spezifische stri ng verwenden diese:

"|".join([dt.get('key6'), dt.get('key35'), dt.get('key233'), dt.get('key189'), dt.get('key622'), dt.get('key454')]) 

Versuchen Variablennamen nicht wie list zu verwenden, dict usw.

+0

das ist großartig! aber ich brauche diese bestimmte Reihenfolge von key6, key35, key233, key189, key622, key454 –

+0

hab es! Ich denke, dass ich genau das, was ich im Sinn hatte. Tolle Idee, vielen Dank !! –

+0

Verwenden Sie einfach die Syntax dt.get (Schlüssel). Ich werde meine Antwort bearbeiten. –

1

Da Sie nichts, um angegeben haben, dies tun soll:

data = [["key189","0","apples"], 
     ["key622","1","bananas"], 
     ["key233","2","bacon"], 
     ["key454","3","bread"], 
     ["key35","4","jam"], 
     ["key6","5","coffee"]] 
print("|".join([pair[2] for pair in data])) 
0
"|".join(fruit for _, _, fruit in list) 
0

Statt hardcording die Reihenfolge, in einem if-else-Konstrukt, könnten Sie definieren es nur in einem Liste, und sortieren Sie dann entsprechend dem Index, den das Einzelteil in dieser Liste hat:

order = ['key6', 'key35', 'key238', 'key189', 'key622', 'key454'] 
print("|".join(y[2] for y in sorted([x for x in lst if x[0] in order], key = lambda i: order.index(i[0]))))