我有一个python字典,由tupples组成的字典键,
像这样 :
{ (u'A_String_0', u'A_String_1', u'B_String_3', u'Remove_Me'): 300, (u'A_String_0', u'B_String_4'): 301, (u'A_String_0', u'A_String_1', u'B_String_3', u'Remove_Key'): 301, }
当只有部分tupple出现在key中时,我想从字典中删除所有键:
例如 'Remove_'
在这种情况下,必须弹出两个键:一个包含u'Remove_Me'
,另一个包含u'Remove_Key'
最后字典将如下所示:
{ (u'A_String_0', u'B_String_4'): 301 }
非常感谢 !
单程:
>>> d = { (u'A_String_0', u'A_String_1', u'B_String_3', u'Remove_Me'): 300, (u'A_String_0', u'B_String_4'): 301, (u'A_String_0', u'A_String_1', u'B_String_3', u'Remove_Key'): 301, } >>> >>> >>> d_out = {k:v for k,v in d.items() if not any(x.startswith('Remove_') for x in k)} >>> d_out {(u'A_String_0', u'B_String_4'): 301}
编辑:如果你想检查是否Remove_
是元组键的任何项目的一部分,那么你最好:
>>> d_out = {k:v for k,v in d.items() if not any('Remove_' in x for x in k)}
由于键总是没有任何结构或模式的组合,因此您始终需要使用完整键才能访问字典中的元素.特别是这意味着您无法使用某个部分键找到元素.所以为了做到这一点,除了查看所有键之外别无他法:
>>> d = { (u'A_String_0', u'A_String_1', u'B_String_3', u'Remove_Me'): 300, (u'A_String_0', u'B_String_4'): 301, (u'A_String_0', u'A_String_1', u'B_String_3', u'Remove_Key'): 301} >>> { k: v for k, v in d.items() if not any(x.startswith('Remove_') for x in k) } {(u'A_String_0', u'B_String_4'): 301}
这将创建一个从源字典一个新的字典,采取一切关键k
的这any(x.startswith('Remove_') for x in k)
是不正确的.也就是说any()
,如果有一个元素表达为真x
,与开始'Remove_'
.