除了以下方法之外,是否有其他方法仅在给定键存在的情况下删除字典中的项:
if key in mydict:
del mydict[key]
在这种情况下,我得到了一组要从给定的字典中删除的键,但我不确定这些键是否都存在于字典中。以防我错过更有效的解决方案。
让我们将keys
称为要删除的键的列表/迭代器。我会这样做:
keys_to_remove = set(keys).intersection(set(mydict.keys()))
for key in keys_to_remove:
del mydict[key]
您预先计算所有受影响的项目并对其进行操作。
我更喜欢创建一个新的字典,而不是修改一个现有的字典,所以我可能还会考虑以下问题:
keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: v for k, v in mydict.iteritems() if k in keys_to_keep}
或:
keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: mydict[k] for k in keys_to_keep}
还有:
try:
del mydict[key]
except KeyError:
pass
这只执行1次查找而不是2次查找。但是,except
子句的开销很大,因此如果您最终频繁地使用except子句,那么这可能会比您已经拥有的效率低。
您可以使用dict.pop
:
mydict.pop("key", None)
请注意,如果没有给出第二个参数,即none
,则如果键不在字典中,则会引发keyerror
。提供第二个参数可以防止条件异常。
我有一本这样的字典: 我怎么才能把匕首从上面取下来? 我试过这个: 或 但它犯了这个错误:
问题内容: 我有一个脚本,它使用DROP TABLE IF EXISTS删除表的负载,这可以工作。 此脚本中还有一个删除操作,用于从我不管理的另一个表中删除一行。该表可能存在或不存在。是否有任何在尝试删除行之前检查该表是否存在? 这需要适用于MYSQL和SQLServer 谢谢亚历克斯 问题答案: 要签入SQL SERVER, 要检查mysql: 您只需数:
问题内容: 如果嵌套字典前面没有键,我现在可以删除重复项。我可以使用此功能的字典列表的一个示例是: 但是,我希望能够根据键和该词典中关联的所有值删除重复项。因此,如果内部有相同的键但值不同,则我不想删除它,但是如果有完整的副本,则将其删除。 我该怎么做呢?谢谢。 问题答案: 要从字典列表中删除重复项,请执行以下操作:
问题内容: 从字典中删除键时,我使用: 有没有一种方法可以做到这一点? 问题答案: 要删除键而不管它是否在字典中,请使用以下两个参数的形式: 如果典中存在,则返回,None否则返回。如果第二个参数未指定(即)并且key不存在,则引发a。 要删除肯定存在的密钥,你还可以使用 如果关键字在字典中不存在,则会引发 。
从字典中删除键时,我使用: 有没有一个简单的方法可以做到这一点?
问题内容: 没有人有一个优雅的sql语句来删除表中的重复记录,但前提是重复项的数量多于x个?因此,最多允许2或3个重复项,仅此而已? 当前,我有一条执行以下操作的select语句: 这很好用。但是现在,我只想删除那些重复超过2个的行。 谢谢 问题答案: with cte as ( select row_number() over (partition by dupcol1, dupcol2 ord