2016-12-17 17 views
0

私はここで非常に扱いにくい課題を抱えています。私はリストのリストのx個の数を比較したいのですがリストには辞書が含まれています。辞書内の 'name'キーが合致すれば合格するはずです。 'balance'キーを編集していないリストに辞書全体をコピーして '0'にする必要があります。例えばリストをお互いに比較して完成させてください

のは、我々はこのようなリストのリストを持っていると仮定してみましょう:

list_of_lists=[[{'name': u'Profit','balance': 10},{'name': u'Income','balance': 30},{'name': u'NotIncome','balance': 15}],[{'name': u'Profit','balance': 20},{'name': u'Income','balance': 10}]] 

だから、結果は次のようになります。ここでは

list_of_lists=[[{'name': u'Profit','balance': 10},{'name': u'Income','balance': 30},{'name': u'NotIncome','balance': 15}],[{'name': u'Profit','balance': 20},{'name': u'Income','balance': 10},{'name': u'NotIncome','balance': 0}]] 

は私のコードですが、私はそれを2で動作し得ることができませんリストの数が分かりません(リストの数が分かりません(2,3または4など):

for line in lines: 
    for d1, d2 in zip(line[0], line[1]): 
      for key, value in d1.items(): 
       if value != d2[key]: 
        print key, value, d2[key] 

答えて

0

ULD最初のすべての名前を含むsetを作成し、一つ一つが欠けdictsの追加サブリストを反復処理:

import pprint 

l = [ 
     [ 
      {'name': u'Profit','balance': 10}, 
      {'name': u'Income','balance': 30}, 
      {'name': u'NotIncome','balance': 15} 
     ], 
     [ 
      {'name': u'Profit','balance': 20}, 
      {'name': u'Income','balance': 10} 
     ], 
     [] 
    ] 

all_names = {d['name'] for x in l for d in x} 
for sub_list in l: 
    for name in (all_names - {d['name'] for d in sub_list}): 
     sub_list.append({'name': name, 'balance': 0}) 

pprint.pprint(l) 

出力:

[[{'balance': 10, 'name': u'Profit'}, 
    {'balance': 30, 'name': u'Income'}, 
    {'balance': 15, 'name': u'NotIncome'}], 
[{'balance': 20, 'name': u'Profit'}, 
    {'balance': 10, 'name': u'Income'}, 
    {'balance': 0, 'name': u'NotIncome'}], 
[{'balance': 0, 'name': u'Profit'}, 
    {'balance': 0, 'name': u'Income'}, 
    {'balance': 0, 'name': u'NotIncome'}]] 

あなたが鍵であるdictsにサブリストを変換する検討すべきであると述べました名前と値は、処理を容易にするための残高です。

+0

あなたの回答は素晴らしいです!私は本当にそれがここで唯一の疑いを持って好きだった:それは別のものと異なるかもしれない別のキーが辞書に含まれていたら?同様に、値 'type1'または 'type 2'などの 'type'という別のキーがあります。これを新しい辞書にどのようにコピーする必要がありますか? –

+0

私の質問を編集する必要がありますか?新しいものを作るか? –

関連する問題