我有一把带有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,该键都将被进一步使用。所以基本上需要上面的代码来验证字典是否具有键的预期值。
答案 0 :(得分:2)
if trmode_data.values().count(1) == 2:
print "unexpected"
答案 1 :(得分:1)
由于您知道您的dict只有2个项目,因此您可以将all
与comprehension结合使用:
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,否则哪个关键词“胜利”将是有效随机的。但是通过某种有序的字典实现,最后一个总是会赢,这是你指定的。
祝你好运!