我有一个包含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)
dicts的id是";1〃"2〃"3〃"4〃"4〃;。
只有id不同,我必须删除它。我也试着做了一个双循环,但没有成功。
当我做print(len(self.dict_trie_csv_infos)
时,它会给我5当我打印CCD_ 2时也是如此。
这是我的第一个元素:
{'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,
}}}
这里有一种方法可以满足您的问题:
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
- 创建类型为
Foo
的变量f
,并分配一个包含dict
元素的列表,如问题中的示例,其中event_id
的值为1、2、3、4和4 - 致电
f.remove_duplicate_ids()
- 在包含问题中代码的修改版本的
remove_duplicate_ids()
中,使用名为ids
的set
来检测重复项,并构建结果变量res
以包含具有唯一event_id
值的行
看起来第一个列表中的每个对象都被添加到第二个列表中。这是因为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)