Python2.7:按部分键从字典中删除键

2024-09-30 16:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python字典,由tuples组成的字典键

像这样:

{
 (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,
}

当键中只有tuple的一部分出现时,我想从字典中删除所有键:

例如'Remove_'

在这种情况下,必须弹出两个键:一个包含u'Remove_Me',另一个包含u'Remove_Key'

最后,字典将如下所示:

^{pr2}$

非常感谢!在


Tags: keystring字典情况removemetuplepr2
3条回答

不过,用的是同一个词。还要注意,最初的帖子说“tuple的一部分出现在key中”,所以它不必在开头,即startswith()

>>> 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,
...     }
>>> for k in d.keys():
...     for i in k:
...         if 'Remove_' in i:
...             del d[k]
...             break
... 
>>> d
{(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_是否是tuple键的任何项的一部分,那么最好使用:

^{pr2}$

因为键总是一个没有任何结构或模式的组合体,所以为了访问字典中的元素,总是需要有完整的键。特别是这意味着您无法使用某些部分键找到元素。因此,要做到这一点,除了查看所有关键点外,别无选择:

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

这将从源字典创建一个新字典,获取kany(x.startswith('Remove_') for x in k)不为真的每个键k。如果any()中有一个以^{开头的元素,any()表达式将为真。在

相关问题 更多 >