如何遍历字典以删除与字符串匹配的值?

lan*_*ane 4 python string dictionary list python-2.7

我想从字典中删除包含特定字符串的值,并因此删除任何具有空列表作为值的键。

mydict = {
    'Getting links from: https://www.foo.com/': 
    [
        '+---OK--- http://www.this.com/',
        '+---OK--- http://www.is.com/',
        '+-BROKEN- http://www.broken.com/',
        '+---OK--- http://www.set.com/',
        '+---OK--- http://www.one.com/'
    ],
    'Getting links from: https://www.bar.com/': 
    [
        '+---OK--- http://www.this.com/',
        '+---OK--- http://www.is.com/',
        '+-BROKEN- http://www.broken.com/'
    ],
    'Getting links from: https://www.boo.com/':
    [
        '+---OK--- http://www.this.com/',
        '+---OK--- http://www.is.com/'
    ]
}

val = "is"

for k, v in mydict.iteritems():
   if v.contains(val):
     del mydict[v]
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

{
    'Getting links from: https://www.foo.com/':
    [
        '+-BROKEN- http://www.broken.com/',
        '+---OK--- http://www.set.com/',
        '+---OK--- http://www.one.com/'
    ], 
    'Getting links from: https://www.bar.com/': 
    [
        '+-BROKEN- http://www.broken.com/'
    ]
}
Run Code Online (Sandbox Code Playgroud)

如何删除所有包含字符串的字典值,然后删除所有没有值的键?

jpp*_*jpp 5

您可以在字典理解中使用列表理解。在迭代字典时,不应更改字典中的项目数。

res = {k: [x for x in v if 'is' not in x] for k, v in mydict.items()}

# {'Getting links from: https://www.foo.com/': ['+-BROKEN- http://www.broken.com/',
#                                               '+---OK--- http://www.set.com/',
#                                               '+---OK--- http://www.one.com/'],
#  'Getting links from: https://www.bar.com/': ['+-BROKEN- http://www.broken.com/'],
#  'Getting links from: https://www.boo.com/': []}
Run Code Online (Sandbox Code Playgroud)

如果您希望删除列表值为空的项目,您可以在后续步骤中:

res = {k: v for k, v in res.items() if v}
Run Code Online (Sandbox Code Playgroud)