根据条件删除字典中的条目

Jus*_*rey 15 python dictionary

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

dict = {'Adam' : (10, '2002-08-13'),
        'Eve'  : (40, '1972-08-13')}
Run Code Online (Sandbox Code Playgroud)

我想删除所有年龄> 30岁的关键字元组的年龄,我该怎么办呢?我正在使用dict[name][0]dict是我的字典访问每个键的年龄.

Sve*_*ach 30

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

new_data = {k: v for k, v in data.iteritems() if v[0] <= 30}
Run Code Online (Sandbox Code Playgroud)

在Python 3.x中,使用items()而不是iteritems().

如果您需要更改原始字典,可以使用for-loop:

for k, v in data.items():
    if v[0] > 30:
        del data[k]
Run Code Online (Sandbox Code Playgroud)

在Python 3.x中,使用list(data.items())而不是data.items().

  • @JustinCarrey:由于仅复制指针,因此创建新字典与更改旧字典一样有效。在这种情况下,我什至希望这是更有效的解决方案。“for”循环需要首先将指向*所有*项的指针复制到列表中,而字典理解仅复制我们想要保留的指针。 (2认同)
  • @Dev 不,修改正在迭代的字典是不安全的。但这不是这个答案中的代码所做的;Ptyhon 2 中的 data.items() 或 Python 3 中的 list(data.items()) 创建字典中的项目列表,然后迭代该新列表,而不是原始字典。(我将从这个答案中删除 Python 2 位 - 我想它们不再相关。) (2认同)