2016-07-26 8 views
1

のリスト内の辞書のリストから重複を削除します。私がリストを持っている辞書

my_list = [{'date': '10.06.2016', 
      'account': [{'name': 'a'}, 
         {'name': 'a'}, 
         {'name': 'b'}, 
         {'name': 'b'}]}, 
      {'date': '22.06.2016', 
      'account': [{'name': 'a'}, 
         {'name': 'a'}]}] 

私は'account'に辞書のリストから重複を削除する:

my_list = [{'date': '10.06.2016', 
      'account': [{'name': 'a'}, 
         {'name': 'b'}]}, 
      {'date': '22.06.2016', 
      'account': [{'name': 'a'}]}] 

setを使用する場合は、私が手次のエラー:

TypeError: unhashable type: 'dict'

誰でもこのprで私を助けることができますオームレム?

答えて

0
def deduplicate_account_names(l): 
    for d in l: 
     names = set(map(lambda d: d.get('name'), d['account'])) 
     d['account'] = [{'name': name} for name in names] 

# even shorter: 
# def deduplicate_account_names(l): 
#  for d in l: 
#   d['account'] = [{'name': name} for name in set(map(lambda d: d.get('name'), d['account']))] 

my_list = [{'date': '10.06.2016', 
      'account': [{'name': 'a'}, 
         {'name': 'a'}, 
         {'name': 'b'}, 
         {'name': 'b'}]}, 
      {'date': '22.06.2016', 
      'account': [{'name': 'a'}, 
         {'name': 'a'}]}] 

deduplicate_account_names(my_list) 
print(my_list) 

# [ {'date': '10.06.2016', 
# 'account': [ {'name': 'a'}, 
#     {'name': 'b'} ] }, 
# {'date': '22.06.2016', 
# 'account': [ {'name': 'a'} ] } ] 
+0

を、これは完璧に動作します:

for d in my_list: for k in d: if k == 'account': v = [] for d2 in d[k]: if d2 not in v: v.append(d2) d[k] = v 

これは上記のスニペットを実行した後に得るものです – Jenny

0

セットにはhashableメンバーしか存在せず、リストも辞書もありませんが、それらが等しいかどうかを確認できます。

あなたは

def without_duplicates(inlist): 
    outlist=[] 
    for e in inlist: 
     if e not in outlist: 
      outlist.append(e) 
    return outlist 

これは本当に大きなリストに遅くなることがあります

1

を行うことができます。この構造が複雑な上、おそらくですが、それは仕事を取得します。

my_list = [{'date': '10.06.2016', 
      'account': [{'name': 'a'}, 
         {'name': 'a'}, 
         {'name': 'b'}, 
         {'name': 'b'}]}, 
      {'date': '22.06.2016', 
      'account': [{'name': 'a'}, 
         {'name': 'a'}]}] 

>>> [{'date': date, 
     'account': [{'name': name} for name in group] 
     } for group, date in zip([set(account.get('name') 
            for account in item.get('account')) 
           for item in my_list], 
           [d.get('date') for d in my_list])] 
[{'account': [{'name': 'a'}, {'name': 'b'}], 'date': '10.06.2016'}, 
{'account': [{'name': 'a'}], 'date': '22.06.2016'}] 
0

このコードを試してみてください:、Thxを

In [347]: my_list 
Out[347]: 
[{'account': [{'name': 'a'}, {'name': 'b'}], 'date': '10.06.2016'}, 
{'account': [{'name': 'a'}], 'date': '22.06.2016'}] 
関連する問題