复制遗漏一对(键,值)的字典
copying a dict leaving out one (key, val) pair
在Python 3、如何复制字典只遗漏一个元素?两个字典之间的数据共享对我来说很好。
目前我脑子里有这段代码:
def copy_leaving_out(dictionary, key):
return {k: v for k, v in dictionary if k != key}
有没有更好的方法来实现这个?
编辑:我忘记使用 dictionary.items()
而不是 dictionary
,请考虑使用以下代码代替之前的代码:
def copy_leaving_out(dictionary, key):
return {k: v for k, v in dictionary.items() if k != key}
在dictionary comprehensions
中使用items()
函数获取键和值,最后使用if
子句-
d={'a':1,'b':2,'c':3}
key_remove = 'a'
d_out = {k:v for k,v in d.items() if k != key_remove }
print(d_out)
{'b': 2, 'c': 3}
我认为您不需要使用字典理解。只要放下这把钥匙就足够了。
d = {1: 10, 2:20, 3:30}
res = d.copy()
res.pop(1)
10
res
{2: 20, 3: 30}
使用字典理解很好(和 pythonic)。但是,要迭代 key/value 对,您需要调用 dictionary.items()
:
def copy_leaving_out(dictionary, key):
return {k: v for k, v in dictionary.items() if k != key}
如果你想更明确,你也可以使用dictionary.copy()
创建字典的浅拷贝,然后删除需要的键:
def copy_leaving_out(dictionary, key):
copy = dictionary.copy()
del copy[key]
return copy
在性能方面,第二个版本似乎明显更快,可能是因为它不涉及键比较:
In [14]: d = {k: k for k in range(200)}
In [15]: %timeit copy_leaving_out_dc(d, 100)
13.9 µs ± 724 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [16]: %timeit copy_leaving_out_copy(d, 100)
738 ns ± 4.45 ns per loop (mean ± std. dev. of 7 runs, 1000000 loopseach)
在Python 3、如何复制字典只遗漏一个元素?两个字典之间的数据共享对我来说很好。 目前我脑子里有这段代码:
def copy_leaving_out(dictionary, key):
return {k: v for k, v in dictionary if k != key}
有没有更好的方法来实现这个?
编辑:我忘记使用 dictionary.items()
而不是 dictionary
,请考虑使用以下代码代替之前的代码:
def copy_leaving_out(dictionary, key):
return {k: v for k, v in dictionary.items() if k != key}
在dictionary comprehensions
中使用items()
函数获取键和值,最后使用if
子句-
d={'a':1,'b':2,'c':3}
key_remove = 'a'
d_out = {k:v for k,v in d.items() if k != key_remove }
print(d_out)
{'b': 2, 'c': 3}
我认为您不需要使用字典理解。只要放下这把钥匙就足够了。
d = {1: 10, 2:20, 3:30}
res = d.copy()
res.pop(1)
10
res
{2: 20, 3: 30}
使用字典理解很好(和 pythonic)。但是,要迭代 key/value 对,您需要调用 dictionary.items()
:
def copy_leaving_out(dictionary, key):
return {k: v for k, v in dictionary.items() if k != key}
如果你想更明确,你也可以使用dictionary.copy()
创建字典的浅拷贝,然后删除需要的键:
def copy_leaving_out(dictionary, key):
copy = dictionary.copy()
del copy[key]
return copy
在性能方面,第二个版本似乎明显更快,可能是因为它不涉及键比较:
In [14]: d = {k: k for k in range(200)}
In [15]: %timeit copy_leaving_out_dc(d, 100)
13.9 µs ± 724 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [16]: %timeit copy_leaving_out_copy(d, 100)
738 ns ± 4.45 ns per loop (mean ± std. dev. of 7 runs, 1000000 loopseach)