2017-02-22 3 views
1

にPythonのリストの連結要素ちょっと私はこのように見える問題 問題解決を持っています。出力は、私が必要とする正確に何であるコードレビュー:文字列

しかし、私は疑問を行うにはよりエレガントな 方法がイマイチですそれ?ご注文については何も指定されていませんでしたので

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

この質問は姉妹サイト[ 'CodeReview'に属しているので、私は、オフトピックとして、この質問を閉じるために投票しています](https://codereview.stackexchange.com/) –

+0

あなたの参加の順序はむしろランダムです。 – schwobaseggl

+3

これはあなたが使用している非常に悪いデータ構造です、私はあなたの_key_変数は一意であると思いますので、私はあなたに 'Dictionary'を使うことをお勧めします – Arman

答えて

1

辞書を使用すると、あなたのl ifeは簡単です。

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

dtは次のようになります。

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

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

string_formは次のようになります。

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

は、あなたが任意のキーの値を取得することができます。このような:

dt.get('key35') 

を特定STRIについてNGの使用この:

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

listのような変数名を使用しないようにしてください、dictなど

+0

thats great!しかし、私はkey6、key35、key233、key189、key622、key454の特定の順序が必要です –

+0

それを得ました!私はまさに私が心に持っていたものだと思います。素晴らしいアイデアがたくさんあります! –

+0

dt.get(key)構文を使用してください。私は自分の答えを編集します。 –

1

、これは実行する必要があります。

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

の代わりのif-else構文の順序をhardcording、あなただけで、それを定義することができますリスト内のアイテムに含まれるインデックスに従って並べ替えます。

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])))) 
関連する問題