如何根据条件从python字典中过滤键和值?



我有一个python字典,里面有以下条目:

> ...
>     {'HostName': 'DEMOBDDBX00100.demo', 'BackupStatus': 'SUCCESS'}
>     {'HostName': 'DEMOBDDBX00200.demo', 'BackupStatus': 'SUCCESS'}
>     {'HostName': 'DEMOBDDBX10101.demo', 'BackupStatus': 'FAILURE'}
>     {'HostName': 'DEMOBDDBX10102.demo', 'BackupStatus': 'FAILURE'}
>     {'HostName': 'DEMOBDDBX10201.demo', 'BackupStatus': 'FAILURE'}
>     {'HostName': 'DEMOBDDBX10202.demo', 'BackupStatus': 'FAILURE'}
>     {'HostName': 'DEMOBDMBX00100.demo', 'BackupStatus': 'SUCCESS'}
>     {'HostName': 'DEMOBDMBX00200.demo', 'BackupStatus': 'SUCCESS'}
>     {'HostName': 'DEMOBDMBX10101.demo', 'BackupStatus': 'FAILURE'}
>     {'HostName': 'DEMOBDMBX10102.demo', 'BackupStatus': 'FAILURE'}
>     {'HostName': 'DEMODACRT10100.demo', 'BackupStatus': 'SUCCESS'}
>     {'HostName': 'DEMODACRT10200.demo', 'BackupStatus': 'SUCCESS'}
>     {'HostName': 'DEMODACTS10101.demo', 'BackupStatus': 'SUCCESS'}
>     {'HostName': 'DEMODACTS10102.demo', 'BackupStatus': 'SUCCESS'}
>     {'HostName': 'DEMOKLIRT10100.demo', 'BackupStatus': 'SUCCESS'}
>     {'HostName': 'DEMOKLIRT10200.demo', 'BackupStatus': 'SUCCESS'}
>     {'HostName': 'DEMOKNORT10100.demo', 'BackupStatus': 'SUCCESS'}
>     {'HostName': 'DEMOKNORT10200.demo', 'BackupStatus': 'SUCCESS'}
>     {'HostName': 'DEMOKOSRT10200.demo', 'BackupStatus': 'SUCCESS'}
>     {'HostName': 'DEMOLABTS10300.demo', 'BackupStatus': 'SUCCESS'}
>     {'HostName': 'DEMOLABTS10400.demo', 'BackupStatus': 'SUCCESS'}
> ...

我需要过滤掉主机名中的值,只有当BackupStatus == "FAILURE"我需要这样的输出:

{'HostName': 'DEMOBDMBX10101.demo', 'BackupStatus': 'FAILURE'}
{'HostName': 'DEMOBDDBX10101.demo', 'BackupStatus': 'FAILURE'}
{'HostName': 'DEMOBDDBX10102.demo', 'BackupStatus': 'FAILURE'}
{'HostName': 'DEMOBDDBX10201.demo', 'BackupStatus': 'FAILURE'}
{'HostName': 'DEMOBDDBX10202.demo', 'BackupStatus': 'FAILURE'}`
有人能帮我一下吗?

这看起来不像一个字典,而是一个字典列表。

如果是这种情况,似乎你想获得一个子列表,只有那些元素(字典)有BackupStatus等于FAILURE。所以你可以这样做:

recs = [
{'HostName': 'DEMOBDDBX00100.demo', 'BackupStatus': 'SUCCESS'},
{'HostName': 'DEMOBDDBX00200.demo', 'BackupStatus': 'SUCCESS'},
{'HostName': 'DEMOBDDBX10101.demo', 'BackupStatus': 'FAILURE'},
...
]
failed_recs = [v for v in recs if v['BackupStatus'] == 'FAILURE']

考虑使用列表推导式:

>>> data = [
...   {'HostName': 'DEMOBDDBX00100.demo', 'BackupStatus': 'SUCCESS'},
...   {'HostName': 'DEMOBDDBX00200.demo', 'BackupStatus': 'SUCCESS'},
...   {'HostName': 'DEMOBDDBX10101.demo', 'BackupStatus': 'FAILURE'},
...   {'HostName': 'DEMOBDDBX10102.demo', 'BackupStatus': 'FAILURE'},
...   {'HostName': 'DEMOBDDBX10201.demo', 'BackupStatus': 'FAILURE'},
...   {'HostName': 'DEMOBDDBX10202.demo', 'BackupStatus': 'FAILURE'},
...   {'HostName': 'DEMOBDMBX00100.demo', 'BackupStatus': 'SUCCESS'},
...   {'HostName': 'DEMOBDMBX00200.demo', 'BackupStatus': 'SUCCESS'},
...   {'HostName': 'DEMOBDMBX10101.demo', 'BackupStatus': 'FAILURE'},
...   {'HostName': 'DEMOBDMBX10102.demo', 'BackupStatus': 'FAILURE'},
...   {'HostName': 'DEMODACRT10100.demo', 'BackupStatus': 'SUCCESS'},
...   {'HostName': 'DEMODACRT10200.demo', 'BackupStatus': 'SUCCESS'},
...   {'HostName': 'DEMODACTS10101.demo', 'BackupStatus': 'SUCCESS'},
...   {'HostName': 'DEMODACTS10102.demo', 'BackupStatus': 'SUCCESS'},
...   {'HostName': 'DEMOKLIRT10100.demo', 'BackupStatus': 'SUCCESS'},
...   {'HostName': 'DEMOKLIRT10200.demo', 'BackupStatus': 'SUCCESS'},
...   {'HostName': 'DEMOKNORT10100.demo', 'BackupStatus': 'SUCCESS'},
...   {'HostName': 'DEMOKNORT10200.demo', 'BackupStatus': 'SUCCESS'},
...   {'HostName': 'DEMOKOSRT10200.demo', 'BackupStatus': 'SUCCESS'},
...   {'HostName': 'DEMOLABTS10300.demo', 'BackupStatus': 'SUCCESS'},
...   {'HostName': 'DEMOLABTS10400.demo', 'BackupStatus': 'SUCCESS'},
... ]
>>> [d for d in data if d['BackupStatus'] == 'FAILURE']
[{'HostName': 'DEMOBDDBX10101.demo', 'BackupStatus': 'FAILURE'}, 
{'HostName': 'DEMOBDDBX10102.demo', 'BackupStatus': 'FAILURE'}, 
{'HostName': 'DEMOBDDBX10201.demo', 'BackupStatus': 'FAILURE'}, 
{'HostName': 'DEMOBDDBX10202.demo', 'BackupStatus': 'FAILURE'}, 
{'HostName': 'DEMOBDMBX10101.demo', 'BackupStatus': 'FAILURE'}, 
{'HostName': 'DEMOBDMBX10102.demo', 'BackupStatus': 'FAILURE'}]

最新更新