我正在写一个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
答案 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'}