代码之家  ›  专栏  ›  技术社区  ›  guiguilecodeur

如何删除我的词汇表中的重复元素

  •  0
  • guiguilecodeur  · 技术社区  · 2 年前

    我有一个5个单词的列表,我想用id过滤它们

    如果他们有相同的id,我会删除它

     res = []
    
            for y in self.dict_trie_csv_infos:
                    #check if  same 'event_id' before
                    if float(y['event_id']) not in res:
                        res.append(y)
    

    DICT的id为“1”、“2”、“3”、“4”、“4”

    我也试着做一个双循环,但什么也没做。

    当我打印我的res时也是一样。

    这是我的第一个元素:

    
    {'event_id': 1, 'collection_name': 'Mouse On', 'smart_contract': {'multisig': 'KT1Aer6TxNwoMJejoqsNP8TEN7J6STgMtJcA', 'sale_params': {'is_presale': False, 'metadata_list': [], 'price_per_token': 4, 'max_mint_per_user': 5, 'sale_size': 500, 'sale_currency': {'xtz': None}, 'start_time': 1656626400, 'end_time': 1657490400}}
    
    

    如果有人能找到解决方案,那就太好了。

    2 回复  |  直到 2 年前
        1
  •  2
  •   constantstranger    2 年前

    下面是一种解决问题的方法:

    class Foo:
        def __init__(self):
            dict_trie_csv_infos = []
        def remove_duplicate_ids(self):
            res = []
            ids = set()
            for y in self.dict_trie_csv_infos:
                if y['event_id'] not in ids:
                    ids.add(y['event_id'])
                    res.append(y)
            return res
    
    
    f = Foo()
    f.dict_trie_csv_infos = [
        {'event_id': 1, 'collection_name': 'Mouse On', 'smart_contract': {'multisig': 'KT1Aer6TxNwoMJejoqsNP8TEN7J6STgMtJcA', 'sale_params': {'is_presale': False, 'metadata_list': [], 'price_per_token': 4, 'max_mint_per_user': 5, 'sale_size': 500, 'sale_currency': {'xtz': None}, 'start_time': 1656626400, 'end_time': 1657490400}}},
        {'event_id': 2, 'collection_name': 'Mouse On', 'smart_contract': {'multisig': 'KT1Aer6TxNwoMJejoqsNP8TEN7J6STgMtJcA', 'sale_params': {'is_presale': False, 'metadata_list': [], 'price_per_token': 4, 'max_mint_per_user': 5, 'sale_size': 500, 'sale_currency': {'xtz': None}, 'start_time': 1656626400, 'end_time': 1657490400}}},
        {'event_id': 3, 'collection_name': 'Mouse On', 'smart_contract': {'multisig': 'KT1Aer6TxNwoMJejoqsNP8TEN7J6STgMtJcA', 'sale_params': {'is_presale': False, 'metadata_list': [], 'price_per_token': 4, 'max_mint_per_user': 5, 'sale_size': 500, 'sale_currency': {'xtz': None}, 'start_time': 1656626400, 'end_time': 1657490400}}},
        {'event_id': 4, 'collection_name': 'Mouse On', 'smart_contract': {'multisig': 'KT1Aer6TxNwoMJejoqsNP8TEN7J6STgMtJcA', 'sale_params': {'is_presale': False, 'metadata_list': [], 'price_per_token': 4, 'max_mint_per_user': 5, 'sale_size': 500, 'sale_currency': {'xtz': None}, 'start_time': 1656626400, 'end_time': 1657490400}}},
        {'event_id': 4, 'collection_name': 'Mouse On', 'smart_contract': {'multisig': 'KT1Aer6TxNwoMJejoqsNP8TEN7J6STgMtJcA', 'sale_params': {'is_presale': False, 'metadata_list': [], 'price_per_token': 4, 'max_mint_per_user': 5, 'sale_size': 500, 'sale_currency': {'xtz': None}, 'start_time': 1656626400, 'end_time': 1657490400}}}
    ]
    
    res = f.remove_duplicate_ids()
    [print(elem, '\n') for elem in res]
    

    输出:

    {'event_id': 1, 'collection_name': 'Mouse On', 'smart_contract': {'multisig': 'KT1Aer6TxNwoMJejoqsNP8TEN7J6STgMtJcA', 'sale_params': {'is_presale': False, 'metadata_list': [], 'price_per_token': 4, 'max_mint_per_user': 5, 'sale_size': 500, 'sale_currency': {'xtz': None}, 'start_time': 1656626400, 'end_time': 1657490400}}}
    
    {'event_id': 2, 'collection_name': 'Mouse On', 'smart_contract': {'multisig': 'KT1Aer6TxNwoMJejoqsNP8TEN7J6STgMtJcA', 'sale_params': {'is_presale': False, 'metadata_list': [], 'price_per_token': 4, 'max_mint_per_user': 5, 'sale_size': 500, 'sale_currency': {'xtz': None}, 'start_time': 1656626400, 'end_time': 1657490400}}}
    
    {'event_id': 3, 'collection_name': 'Mouse On', 'smart_contract': {'multisig': 'KT1Aer6TxNwoMJejoqsNP8TEN7J6STgMtJcA', 'sale_params': {'is_presale': False, 'metadata_list': [], 'price_per_token': 4, 'max_mint_per_user': 5, 'sale_size': 500, 'sale_currency': {'xtz': None}, 'start_time': 1656626400, 'end_time': 1657490400}}}
    
    {'event_id': 4, 'collection_name': 'Mouse On', 'smart_contract': {'multisig': 'KT1Aer6TxNwoMJejoqsNP8TEN7J6STgMtJcA', 'sale_params': {'is_presale': False, 'metadata_list': [], 'price_per_token': 4, 'max_mint_per_user': 5, 'sale_size': 500, 'sale_currency': {'xtz': None}, 'start_time': 1656626400, 'end_time': 1657490400}}}
    

    说明:

    • Foo 具有实例属性 dict_trie_csv_infos remove_duplicate_ids
    • 创建变量 f 类型 并用 dict 元素,如问题中的示例,其值为 event_id 第1、2、3、4和4页
    • f.remove_duplicate_ids()
    • 在里面 remove_duplicate_ids() ,其中包含问题中代码的修改版本,请使用 set ids 检测重复项,并构建结果变量 res 包含具有唯一性的行
        2
  •  1
  •   Alex Oakley    2 年前

    看起来第一个列表中的每个对象都被添加到第二个列表中。这是因为 float(y['event_id']) not in res 总是在评估 True .

    res = []
    
    for y in self.dict_trie_csv_infos:
    
        # check if  same 'event_id' before
        found = False
        for x in res:
          if y['event_id'] == x['event_id']:
            found = True
            break
        if(not found)
          res.append(y)