根据Python中的字符串值从字典中删除键

时间:2017-09-11 12:45:08

标签: python python-2.7 dictionary key

为什么这不起作用: 我在字典里面有一本字典

{'rrr-rrr/CCC-3/FFFF-1': {'ActiveSet': '0'},
'rrr-rrr/CCC-4/FFFF-1': {'ActiveSet': '1'},
...}

我需要丢弃CCC为3(CCC-3)的密钥。 我尝试的方式是:

my_dict = {k: v 
           for k, v in my_dict.iteritems() 
           if k.split('/')[1].split('-')[1]!= 3
           }

此代码没有错误,但没有任何反应。我也尝试过用CCC号码在内部字典中创建新密钥,但这也不起作用。 期望的输出:

{'rrr-rrr/CCC-4/FFFF-1': {'ActiveSet': '1'},
    ...}

3 个答案:

答案 0 :(得分:6)

作为Jon Clements mentioned,您将字符串与整数进行比较,因此您的if条件永远不会评估为true。

作为修正案,我会选择更喜欢的东西:

val = 3
my_dict = {k : v 
           for k, v in my_dict.iteritems() 
           if 'CCC-{}'.format(val) not in k
         }

这样,您就不必对拆分和索引进行硬编码。请注意,如果您使用CCC-<number>表单中数字为两位或更多位数的键,则您需要匹配CCC-{}/,因为Danil Speransky在他的answer中巧妙地观察到

请注意,相当于dict.iteritems的python 3是dict.items

答案 1 :(得分:2)

您的代码不起作用,因为您比较整数和字符串。将其更改为'3'

if k.split('/')[1].split('-')[1] != '3'

或更简单:

if 'CCC-3/' not in k

我已添加/以排除CCC-32

答案 2 :(得分:1)

您只需在密钥中搜索所需的模式:

new_data = {a:b for a, b in d.items() if "CCC-3" not in a}