如何在Python中根据元组的第一个元素最有效地从元组列表中删除元组?

问题描述 投票:0回答:1

我的数据结构如下,

data = {
    '0_0': [('0_0', 0), ('0_1', 1), ('0_2', 2)],
    '0_1': [('0_0', 1), ('0_1', 0), ('0_2', 1)],
    '0_2': [('0_0', 2), ('0_1', 1), ('0_2', 0)],
}

如何通过给定键从列表中删除元组?例如我写了一个函数如下,

def remove_all_acs(
    dictionary,
    delete_ac
):
    for key in dictionary:
        acs = dictionary[key]
        for ac in acs:
            if ac[0] == delete_ac:
                acs.remove(ac)
                break

    return dictionary

这是我的预期输出,返回结果如下,

print(remove_all_acs(data, '0_0'))
{
    '0_0': [('0_1', 1), ('0_2', 2)],
    '0_1': [('0_1', 0), ('0_2', 1)],
    '0_2': [('0_1', 1), ('0_2', 0)]
}

它可以工作,但在大型列表上效果不佳。你有什么主意吗?预先感谢。

此外,您可以使用此代码创建大型数据集,

def generate(size, max_connections):
    data = {}
    keys = [f'{i}_{j}' for i in range(size) for j in range(size)]
    
    for key in keys:
        connections = random.randint(1, min(max_connections, 10))
        data[key] = [
            (random.choice(keys), random.randint(1, 10)) 
            for _ in range(connections)
        ]
    
    return data

data = generate(200, 10)
python
1个回答
0
投票

列表和字典理解非常快且可读,试试这个:

def get_filtered(data, bad_value):
    return {
        key: [
            t for t in value
            if not t[0] == bad_value
        ]
        for key, value in data.items()
    }

get_filtered(data, '0_0')

似乎对随机生成的数据运行得相当快。

© www.soinside.com 2019 - 2024. All rights reserved.