从特定键中删除字典列表中的元素



我有一个像这样的字典:

my_dict = {'A' : [1, 2, 3, 4, 5], 'B' : [10, 1, 2, 5, 8], 'C': [6, 5, 3, 1]}

我想从"A"中删除小于3的值和";C"而B保持不变,因此输出如下:

my_dict = {'A' : [ 3, 4, 5], 'B' : [10, 1, 2, 5, 8], 'C': [6, 5, 3]}

如何做到这一点又快又容易?

我会使用dict/listcomp:

my_dict = {'A' : [1, 2, 3, 4, 5], 'B' : [10, 1, 2, 5, 8], 'C': [6, 5, 3, 1]}
out = {k: [e for e in v if e >= 3] if k != "B" else v
for k, v in my_dict.items()}
#1.29 µs ± 12.4 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)

输出:

>>> print(out)
{'A': [3, 4, 5], 'B': [10, 1, 2, 5, 8], 'C': [6, 5, 3]}

这么难看的理解,

{k: [n for n in my_dict[k] if not n<3] for k in my_dict if k != 'B'} 

会给你想要的输出。

这是一个包容性的方法-即,我们对键A和C感兴趣。B将被隐式忽略,任何其他键(除了A和C)

my_dict = {'A' : [1, 2, 3, 4, 5], 'B' : [10, 1, 2, 5, 8], 'C': [6, 5, 3, 1]}
for key in 'AC':
my_dict[key] = [n for n in my_dict[key] if n > 2]
print(my_dict)

输出:

{'A': [3, 4, 5], 'B': [10, 1, 2, 5, 8], 'C': [6, 5, 3]}

最新更新