复制一个字典,省去一对(键,值)对

时间:2019-02-09 10:47:23

标签: python python-3.x dictionary copying

在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}

3 个答案:

答案 0 :(得分:5)

使用字典理解很好(和pythonic)。但是,要遍历键/值对,您需要调用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 :(得分: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}

答案 2 :(得分:1)

我认为您不需要使用字典理解。仅需删除此键即可。

d = {1: 10, 2:20, 3:30}
res = d.copy()
res.pop(1)
10
res
{2: 20, 3: 30}