复制一个字典留出一个(键,val)的一对

问题描述 投票:0回答:3

在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}
python python-3.x dictionary copying
3个回答
5
投票

使用字典的理解是罚款(和Python的)。然而,遍历你需要调用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)

1
投票

使用items()功能dictionary comprehensions得到键和值,最后用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}

1
投票

我不认为你需要使用字典理解。这将足以只是删除此键。

d = {1: 10, 2:20, 3:30}
res = d.copy()
res.pop(1)
10
res
{2: 20, 3: 30}
© www.soinside.com 2019 - 2024. All rights reserved.