Python 如何检查字典是否只有一个值为“的键”;1“;
我有一本有两把钥匙的字典。只有一个键的值为1。如果两个键的值均为1,则应给出错误消息 这是我尝试过的工作代码,但想知道是否有任何方法可以优化相同的代码Python 如何检查字典是否只有一个值为“的键”;1“;,python,python-2.7,Python,Python 2.7,我有一本有两把钥匙的字典。只有一个键的值为1。如果两个键的值均为1,则应给出错误消息 这是我尝试过的工作代码,但想知道是否有任何方法可以优化相同的代码 >>> trmode_data = {'continuous': 1, 'fixed': 1} >>> new = [] >>> for k, v in trmode_data.items(): ... if v == 1: ... new.append(k) >>>
>>> 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,都将进一步使用该键。因此,基本上需要上面的代码来验证字典是否有键的预期值。因为您知道您的dict正好有两个项,所以可以结合使用:
或者,更通用的方法是使用: 根据你的陈述: 无论哪个键的值为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
运行:
顺便说一句,无论你从哪里阅读,你几乎肯定要使用when-in,否则哪个键“赢”实际上是随机的。但是通过某种有序的字典实现,最后一个总是会赢,这就是您指定的
祝你好运
if len([v代表trmode中的v_data.values(),如果v==1])>1
@Rawing您是对的。我的错。我忘了它在Py2@Rawing中返回了一个列表,完美的答案!工作得很有魅力。多谢!第一种方法也适用于2个以上的项目,对吗?@Jean Françoisfare如果有2个以上的项目,all
解决方案将有不同的行为-因为它检查所有值是否为1,而不是是否有多个1。对!在这种情况下,所有的
都可能有点过头了。但是使用或的解决方案并不是更好。
if sum(val==1 for val in trmode_data.values()) > 1:
print('unexpected')
if trmode_data.values().count(1) == 2:
print "unexpected"
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}