Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查字典是否只有一个值为“的键”;1“;_Python_Python 2.7 - Fatal编程技术网

Python 如何检查字典是否只有一个值为“的键”;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) >>>

我有一本有两把钥匙的字典。只有一个键的值为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,都将进一步使用该键。因此,基本上需要上面的代码来验证字典是否有键的预期值。

因为您知道您的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}