如何检查字典是否只有一个值为" 1"

时间:2017-07-05 21:08:54

标签: python python-2.7

我有一把带有2把钥匙的字典。只有一个键可以具有值1.如果两个键的值都为1,则应该给出错误消息。

这是我尝试的工作代码,但想知道是否有任何方法可以优化相同的工作代码?

>>> trmode_data = {'continuous': 1, 'fixed': 1}

>>> new = []
>>> for k, v in trmode_data.items():
...  if v == 1:
...   new.append(k)

>>> if len(new) > 1:
...  print "unexpected"
...
unexpected

无论哪个键值为1,该键都将被进一步使用。所以基本上需要上面的代码来验证字典是否具有键的预期值。

3 个答案:

答案 0 :(得分:2)

if trmode_data.values().count(1) == 2:
    print "unexpected"

答案 1 :(得分:1)

由于您知道您的dict只有2个项目,因此您可以将allcomprehension结合使用:

if all(val==1 for val in trmode_data.values()):
    print('unexpected')

或者,更通用的方法是使用sum

if sum(val==1 for val in trmode_data.values()) > 1:
    print('unexpected')

答案 2 :(得分:0)

鉴于你的陈述:

  

无论哪个键值为1,该键都将被进一步使用。

听起来你想继续使用你的字典,只是没有值为1的dup键。 (而且我假设你想要所有值的唯一性,而不仅仅是1。)

您可以通过反转字典来实现此目的。例如:

x = {'a':1, 'b':1, 'c':2}

x_ = {v:k for k,v in x.items()}
x = {v:k for k,v in x_.items()}

print x

执行命令

$ python test2.py 
{'c': 2, 'b': 1}
顺便说一下,你几乎肯定想从你读书的地方读书时使用OrderedDict,否则哪个关键词“胜利”将是有效随机的。但是通过某种有序的字典实现,最后一个总是会赢,这是你指定的。

祝你好运!