为什么这不起作用: 我在字典里面有一本字典
{'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'},
...}
答案 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}