检查字典键是否有空值

2024-05-14 17:12:26 发布

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

我有下列词典

dict1 ={"city":"","name":"yass","region":"","zipcode":"",
       "phone":"","address":"","tehsil":"", "planet":"mars"}

我正在尝试创建一个新的字典,它将基于dict1,但是

  1. 它将不包含带有空字符串的键。
  2. 它不会包含那些我不想包含的密钥。

我已经能够满足要求2,但得到的问题与要求1。这是我的代码。

dict1 ={"city":"","name":"yass","region":"","zipcode":"",
   "phone":"","address":"","tehsil":"", "planet":"mars"}

blacklist = set(("planet","tehsil"))    
new = {k:dict1[k] for k in dict1 if k not in blacklist} 

这给了我没有钥匙的字典:“税收区”,“行星” 我也试过下面的方法,但没有成功。

new = {k:dict1[k] for k in dict1 if k not in blacklist and dict1[k] is not None}

生成的dict应该如下所示:

new = {"name":"yass"}

Tags: nameincitynewaddressnotphoneregion
3条回答

只需测试dict1[k]的真值(而不是is None)。

new = {k:dict1[k] for k in dict1 if k not in blacklist and dict1[k]}

这必须是最快的方法(使用setdifference):

>>> dict1 = {"city":"","name":"yass","region":"","zipcode":"",
       "phone":"","address":"","tehsil":"", "planet":"mars"}
>>> blacklist = {"planet","tehsil"}
>>> {k: dict1[k] for k in dict1.viewkeys() - blacklist if dict1[k]}
{'name': 'yass'}

白名单版本(使用集合intersection):

>>> whitelist = {'city', 'name', 'region', 'zipcode', 'phone', 'address'}
>>> {k: dict1[k] for k in dict1.viewkeys() & whitelist if dict1[k]}
{'name': 'yass'}

这是白名单版本:

>>> dict1 ={"city":"","name":"yass","region":"","zipcode":"",
       "phone":"","address":"","tehsil":"", "planet":"mars"}
>>> whitelist = ["city","name","planet"]
>>> dict2 = dict( (k,v) for k, v in dict1.items() if v and k in whitelist )
>>> dict2
{'planet': 'mars', 'name': 'yass'}

黑名单版本:

>>> blacklist = set(("planet","tehsil"))
>>> dict2 = dict( (k,v) for k, v in dict1.items() if v and k not in blacklist )
>>> dict2
{'name': 'yass'}

两者本质上是相同的,除了一个有not in,另一个有in。如果您的python版本支持它,则可以执行以下操作:

>>> dict2 = {k: v for k, v in dict1.items() if v and k in whitelist}

以及

>>> dict2 = {k: v for k, v in dict1.items() if v and k not in blacklist}

相关问题 更多 >

    热门问题