使用'如果在'用字典

时间:2014-03-30 14:02:57

标签: python dictionary

我无法相信,但我对这应该是一项非常简单的任务感到难过。

我需要检查字符中的值是否为 键或值。我可以使用if 'A' in dictionary查找密钥,但我似乎无法将其用于values。我意识到我可以使用for循环来做这个,我可以诉诸于此但我想知道是否有内置的方法。

4 个答案:

答案 0 :(得分:9)

您可以使用in运算符和any这样的函数

value in dictionary or any(value in dictionary[key] for key in dictionary)

此处,如果value in dictionaryvalue

的键之一,dictionary会确保表达式被评估为Truthy
any(value in dictionary[key] for key in dictionary)

这部分确保被搜索的value位于字典中的任何值中。

注意:这种方法非常有效,因为

  1. 您无需在内存中创建任何其他列表

  2. 找到匹配后立即
  3. any功能短路。

  4. 如果您想确保要搜索的值完全匹配,那么您可以将in更改为==,就像这样

    value in dictionary or any(value == dictionary[key] for key in dictionary)
    

    As DSM Suggested,如果我们在Python 2.x中使用value in dict.itervalues(),在Python 3.x中使用value in dict.values()会更好

答案 1 :(得分:3)

两种简单的方法:

my_keys = my_dict.keys()

my_keys是一个列表,因此您可以检查成员身份

my_values = my_dict.values()

相同

if some_thing in my_keys
if some_thing in my_values

当然,您不必使用密钥,因为使用密钥,您可以直接询问

if some_thing in my_dict

答案 2 :(得分:3)

我相信您正在寻找d.values()

d.keys()dict个键的列表(尽管您最初所做的就是键的技巧)

d.values()dict值的列表。 (您可以测试这些是否为会员资格。)

其中d是您的dict

您可以将这些视为普通列表

还有:

d.items() 

每个(key, value)条目dict形式的元组列表

示例:

[(key, value), (key, value) ... ]

因此使用d.keys()测试d.values()in中的成员资格很简单

使用d.items(),您可以:

for pair in d.items():
    if "A" in pair:
        do your thing

还有d.iteritems()您可以使用for循环,我建议您谷歌。

答案 3 :(得分:3)

您可以执行以下操作 - 即将词典中的所有keysvalues合并到一个新列表中,并使用in关键字查找其中是否存在值或不:

dict = {"a" : "b", "c" : "d"}

value = "b"

if value in dict.keys() + dict.values():
    print "present"
else: 
    print "absent"

您可以进一步优化以下内容,以便使用内置的O(1)检查密钥(来自@ Wooble的评论),并且只有在字段值不是时才查找字典值在键

if value in dict or value in dict.values():
    print "present"

`