从词典列表中删除重复列表 [英] Remove duplicates from list of dictionaries within list of dictionaries

查看:74
本文介绍了从词典列表中删除重复列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有清单:

  my_list = [{'date':'10 .06.2016',
'帐户:[{'name':'a'},
{'name':'a'},
{'name':'b'},
{'name' :'b'}]},
{'date':'22 .06.2016',
'account':[{'name':'a'},
{'name' :'a'}]}]

我想从<$的字典列表中删除重复项c $ c>帐户 :

  my_list = [{'date':'10 .06。 2016,
帐户:[{'name':'a'},
{'name':'b'}]},
{'date':'22.06。 2016',
'account':[{'name':'a'}]}]

使用 set 时,出现以下错误:


TypeError:不可散列的类型:'dict'


有人可以帮我解决这个问题吗?


解决方案

  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 name]

#更短:
#def deduplicate_account_names(l):
#l中的d:
#d ['account'] = [{'name':name} for set in (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',
#'帐户':[{'名称':'a'},
#{'名称':'b'}]},
#{'日期':'22 .06。 2016',
#‘帐户’:[{'名称:‘a’}]}]


I have list:

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

I want to remove duplicates from the list of dictionaries in 'account':

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

When using set, I get the following error:

TypeError: unhashable type: 'dict'

Can anybody help me with this problem?

解决方案

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'} ] } ]

这篇关于从词典列表中删除重复列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆