Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python使用列表理解从字典中删除_Python - Fatal编程技术网

Python使用列表理解从字典中删除

Python使用列表理解从字典中删除,python,Python,我想成为一名优秀的蟒蛇学家,尽可能使用列表理解法 为什么这样不行 [del my_dict[r] for r in to_remove] 目标是从我的dict对象中删除列表中的条目 这: 工作正常,但我正在尝试使用列表理解法,你不应该使用列表理解法来产生副作用,它不是pythonic 应该使用一个简单的for循环。因为delx是一个不应该这样使用的语句。这在语法上是不正确的 只是: 你可以这么做,但我会听杰米拉克的。当然,这是返回一个新列表,而不是从my_dict my_dict = [x f

我想成为一名优秀的蟒蛇学家,尽可能使用列表理解法

为什么这样不行

[del my_dict[r] for r in to_remove]
目标是从我的dict对象中删除列表中的条目 这:


工作正常,但我正在尝试使用列表理解法,你不应该使用列表理解法来产生副作用,它不是pythonic


应该使用一个简单的for循环。

因为
delx
是一个不应该这样使用的语句。这在语法上是不正确的

只是:

你可以这么做,但我会听杰米拉克的。当然,这是返回一个新列表,而不是从
my_dict

my_dict = [x for x in my_dict if x not in to_remove]
  • 你没有从这里的列表理解中获得任何东西,因为你不是在寻找一个新的列表
  • del不是一个函数,因此不能作为列表理解的一部分调用它
  • 基本上,只需迭代列表即可:

    for r in to_remove:
        del my_dict[r]
    
    你可以做:

    [my_dict.pop(r) for r in to_remove]
    

    .pop
    返回已删除的键tho的值,它将比
    del
    ()稍微慢一点,并且不是最“pythonic”的方法。因此,您可能不应该像其他人建议的那样。

    列表理解用于从旧列表创建新列表,可能会检查条件。为了你的使用,你应该使用循环。@andy boot,看在Python的份上,读一读!这也可以通过集合来实现,例如,
    set(my_dict.keys())。difference(to_remove)
    我只是给OP一个查看的选项。我明确提到这不是一个好方法,问题是关于列表理解。感谢
    set
    选项,我以前从未使用过
    difference
    函数。完全同意,如果您没有以这种方式使用set,请发表评论:)+1这应该是公认的答案,因为它提到了真正的原因
    for r in to_remove:
        del my_dict[r]
    
    [my_dict.pop(r) for r in to_remove]