【问题标题】:deleting entries in a dictionary based on a condition根据条件删除字典中的条目
【发布时间】:2012-08-13 17:22:22
【问题描述】:

我有一个字典,其中名称作为键,(年龄,出生日期)元组作为这些键的值。例如

dict = {'Adam' : (10, '2002-08-13'),
        'Eve'  : (40, '1972-08-13')}

我想删除值元组中年龄 > 30 的所有键,我该怎么做?我正在使用 dict[name][0] 访问每个键的年龄,其中 dict 是我的字典。

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    通常的方法是创建一个只包含您想要保留的项目的新字典:

    new_data = {k: v for k, v in data.items() if v[0] <= 30}
    

    如果需要原地修改字典,可以使用for-loop:

    for k, v in list(data.items()):
        if v[0] > 30:
            del data[k]
    

    请注意,list(data.items()) 创建了字典项的浅表副本,即包含对所有键和值的引用的新列表,因此在循环内修改原始字典是安全的。

    【讨论】:

    • 我想将年龄
    • @JustinCarrey:这有什么特别的原因吗? (有正当理由;我只是好奇。)
    • 实际程序对不同的键和值进行操作。但是功能是一样的。因此,为了简单起见,我使用名称作为键,使用 (age, DOB) 作为值。
    • @JustinCarrey:由于只复制指针,因此创建新字典与更改旧字典一样有效。在这种情况下,我什至希望它是更有效的解决方案。 for 循环需要先将指向所有项的指针复制到列表中,而字典推导只复制我们想要保留的指针。
    • @Dev 不,修改正在迭代的字典是不安全的。不过,这不是这个答案中的代码正在做的事情; Ptyhon 2 中的 data.items() 或 Python 3 中的 list(data.items()) 创建字典中项目的列表,然后迭代该新列表,而不是原始字典。 (我将从这个答案中删除 Python 2 位 - 我猜它们不再相关。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 2022-01-20
    • 2021-07-15
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多