2017-05-07 12 views
0

私はPythonリストx = [['a',1], ['b',3],['d',5]]を持っていて、新しいリストに2番目の列の値を格納したいと考えています。y = [['a',1], ['b',3], ['c',0], ['d',5]] 必ずしも最初のリストにすべてのa、b、c、dのエントリがあるとは限りません。ここで は、私が今持っているものです。Python:handle python list

x = [['a',1], ['b',3],['d',5]] 
    y = [] 
    b = ('a','b','c','d') 
    for key in b: 
     for i, sublist in enumerate(x): 
      if sublist[0] == key: 
       y.append(sublist) 
      else 
       y.append([key,0]) 
    print y 

これは与える:

[['a', 1], ['a', 0], ['a', 0], ['b', 0], ['b', 3], ['b', 0], ['c', 0], ['c', 0], ['c', 0], ['d', 0], ['d', 0], ['d', 5]] 

それは私が間違っているのことは何ですか?

+0

リストxのキーがリストbにあることを確認しようとしていますか?そのような場合は、そのようなループをネストする必要はありません。これは、代わりに 'in'キーワードを使用する必要があることを意味します。さらに、私はマッチを見つけるときにあなたの目標が何であるか分かりません。常に最新の値で更新したいと考えていますか? – idjaw

+0

forループのたびに、条件をチェックしてリストに追加しています。これは長すぎる結果です – bigbounty

答えて

1

(あなたが書くために意図したものと少し似て)最初のアプローチとして、我々は明示的なループを使用することができますが:

x = [['a', 1], ['b', 3], ['d', 5]] 
b = ['a', 'b', 'c', 'd'] 
y = [] 

for key in b: 
    for k, v in x: 
    if key == k:  # if the key was found 
     y.append([k, v]) # add it with its value 
     break   # and break from the loop 
    else: 
    y.append([key, 0]) # if the key was not found, add it with 0 value 

より良いアプローチがスピードアップ検索する辞書、およびリストを使用することですさらに高速な処理のための読解:

d = dict(x) 
y = [[k, d[k]] if k in d else [k, 0] for k in b] 

いずれかの方法、それが期待どおりに動作:

print y 
=> [['a', 1], ['b', 3], ['c', 0], ['d', 5]] 
+1

投票者:コメントしますか?私の答えは期待される結果を与える! –

+0

私はdownvoterではありません。しかし、私はここで良い答えは、彼らがやろうとしていることに基づいて、これを行うための最善のアプローチに近くないことをOPが理解するのを助けることになると思います。 bに存在するリストxのキーに基づいて操作を実行しようとしていることは明らかです。したがって、OPが適切にチェックするためのいくつかのことを学ぶのを助けるための説明を提供するのを助けてはいかがですか?また、コードにこれらのコメントを追加する前に、下線が表示されました。 – idjaw

+0

「方法の前に」、ええと、50秒前のように。私はそれがまだ投票なしに投票されたときに質問を編集していました。説明はありません –

1
#setup an eampty dict with all the required keys 
y = {e:0 for e in b} 
#populate elements of y using elements from x 
y.update(x) 
#convert the dict to a list in the required format. 
y = [[k,v] for k,v in y.items()] 

Out[133]: [['a', 1], ['b', 3], ['c', 0], ['d', 5]] 
+0

OPは、dictではなく、_list_を出力として想定しています –

+0

中間出力をコピーして固定しました。 – Allen

0

一つ明らかに間違っ文は

if sublist[0] == key: 
    y.append(sublist) 
else 
    y.append([key,0]) 

あなたが別のキーを持っているxのすべての要素のために[key, 0]のペアを挿入し、この方法です。

しかしアルゴリズムを少し書き直すことを検討する必要があります。たとえば、xが結合リストではなくdictの場合、キーをテストするために反復処理を行う必要はありません。