dicts列表,如果类型' list'是另一个项目的子集

时间:2016-11-14 13:52:51

标签: python dictionary

我有一个词典列表,如下所示:

data =  [{'active': 'false', 'id': [u'PB1001216', u'PB1007555'], 'game': u'Game1', 'name': u'Test'}, 
         {'active': 'false', 'id': [u'PB1001216', u'PB1007555', u'PB1000395'], 'game': u'Game1', 'name': u'Test'}, 
         {'active': 'false', 'id': [u'PB1007555'], 'game': u'Game2', 'name': u'Test'}]

我想删除列表中的字典,其中gamename的值存在,id列表是另一个字典项的子集。具有最多元素的列表应保持为最新的。

所以在上面的例子中。我希望:

  1. 因为id是
  2. 下面的记录的子集而被删除
  3. 保留为第1项中子集的元素。
  4. 保持游戏价值不同
  5. 有关解决此问题的最佳方法的任何建议吗?

1 个答案:

答案 0 :(得分:0)

你可以遍历那些符合你条件的元素:

data =  [{'active': 'false', 'id': [u'PB1001216', u'PB1007555'], 'game': u'Game1', 'name': u'Test'}, 
         {'active': 'false', 'id': [u'PB1001216', u'PB1007555', u'PB1000395'], 'game': u'Game1', 'name': u'Test'},
         {'active': 'false', 'id': [u'PB1001316', u'PB1007555', u'PB1000395'], 'game': u'Game1', 'name': u'Test'},
         {'active': 'false', 'id': [u'PB1007555'], 'game': u'Game2', 'name': u'Test'}]

for item in data:
    for element in data:
        if element != item and element['game'] == item['game']:
            if len(item['id']) > len(element['id']):
                if element['id'] == item['id'][:len(element['id'])]:
                    data.pop(data.index(element))
            else:
                if item['id'] == element['id'][:len(item['id'])]:
                    data.pop(data.index(item))