如果“List”类型的值是另一项的子集,则删除dict列表

2024-05-03 04:21:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典列表,比如:

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. 与第1项中的子集相同的元素越多。你知道吗
  3. 因为游戏价值不同

对解决这个问题的最佳方法有什么建议吗?你知道吗


Tags: nametestidgamefalse元素列表data
1条回答
网友
1楼 · 发布于 2024-05-03 04:21:17

您可以迭代元素,弹出符合条件的元素:

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))

相关问题 更多 >