检查字典中的多个键是不起作用的。蟒蛇

时间:2016-05-07 14:54:52

标签: python dictionary

我正在写一个if语句来确定我的字典是否有多个键。如果不是我只是想通过。我想如果下面的代码没有找到'redshift'作为它将通过的密钥。但是,当我运行它时,redshift不是一个关键,它不会通过。我收到了Key错误。问题是什么。只要它找到'redshift'或'host'就不会过去。

        print config[name].keys() 
        if ("redshift" and "host") in config[name]: 
            print config[name].keys() 
            name.append(config[name]["name"])
            redshift.append(config[name]["redshift"][0]['value'])
            type.append(config[name]["type"][0]["value"])
         else:
            pass

2 个答案:

答案 0 :(得分:3)

表达式("redshift" and "host") in config[name]不测试两个键是否存在。

("redshift" and "host")生成只是 "host",因为and根据truth value返回第一个表达式,如果为false,则第二个表达式为回。所以最后,你真正测试的只是表达式"host" in config[name]

使用两个单独的in测试:

if "redshift" in config[name] and "host" in config[name]:

或使用set.issubset()对字典进行集合测试:

if {'redshift', 'host'}.issubset(config[name]):

答案 1 :(得分:0)

进行此类检查的最有效方法之一是使用集合的交集:

In [62]: config
Out[62]: {'a': 'aaa', 'b': 'bbb', 'c': 'ccc'}

In [63]: len({'a','b'} & config.keys())
Out[63]: 2

In [64]: len({'a','Z'} & config.keys())
Out[64]: 1

因此,检查交叉点的长度将显示是否在键中找到了所有值

工作原理:

In [65]: {'a','b'} & config.keys()
Out[65]: {'a', 'b'}

In [66]: {'a','XXX'} & config.keys()
Out[66]: {'a'}