验证字典中的互斥元素

时间:2011-07-04 11:36:28

标签: python

我有一个可以有三个键url的词典。 linkpath。当我验证字典时,这三者必须是互斥的,即如果字典中存在键url,那么pathlink就不存在等等...... / p>

要添加到并发症:主键不能为空(null或'')

我经常遇到这样的场景,并写了一堆条件语句来测试它。还有更好的方法吗?

感谢。

3 个答案:

答案 0 :(得分:3)

为了测试你的情况,你可以这样做:

# d is your dict
has_url  = bool(d.get('url',  False))
has_link = bool(d.get('link', False))
has_path = bool(d.get('path', False))
# ^ is XOR
if not (has_url ^ has_link ^ has_path):
    # either none of them are present, or there is more than one, or the
    # one present is empty or None

要找到哪一个存在并对其采取行动,你可能仍需要三个独立的分支。

答案 1 :(得分:1)

+1到CatPlusPlus,但是他的代码中有一个我已经评论过的问题,但是这里有修复:

if (url in d and d[url] not in [None, '']) ^ (link in d and d[link] not in [None, '']) ^ (path in d and d[path] not in [None, '']):
    # mutex condition satisfied
else:
    # at least two are keys in the dict or none are

答案 2 :(得分:-1)

也许你不应该使用字典,而是使用元组:

(value, "url") or (value, "path") or (value, "link")