使用defaultdict搜索键/值

时间:2012-01-18 12:09:38

标签: python defaultdict

我熟悉使用iteritems()和items()与标准字典一起使用,它可以与for循环结合使用来扫描键和值。但是,如何使用默认字典最好地执行此操作。例如,我想检查一个给定的值是否显示在键或与任何键相关的任何值中。我目前正在尝试以下方法:

for key, val in dic.iteritems():
    print key, val

然而,我得到以下内容:

1 deque([2, 2])

我对变量/字典

有以下声明
from collections import defaultdict, deque
clusterdict = defaultdict(deque)

那么我如何才能最好地获得关键值?谢谢!

5 个答案:

答案 0 :(得分:3)

通常,对于defaultdict dd ,要检查值 x 是否用作键,请执行以下操作:

x in dd

要检查 x 是否用作值,请执行以下操作:

x in dd.itervalues()

在您的情况下(将deques作为值的defaultdict),您可能想要查看 x 是否在任何deques中:

any(x in deq for deq in dd.itervalues())

请记住,defaultdicts的行为与常规字典相似,只是它们在对缺失键进行d[k]查找时自动创建新条目;否则,他们的行为与常规词汇没有什么不同。

答案 1 :(得分:2)

如果我理解你的问题:

for key, val in dic.iteritems():
    if key!=given_value and not given_value in val:
        print "it's not there!"

除非你有别的意思......

答案 2 :(得分:1)

我是为Python 3设计的:

from collections import defaultdict

count_data = defaultdict(int)
count_data[1] = 10
query = 2
if query in count_data.values():
   print('yes')
  

编辑

您也可以使用Counter字典:

from collections import Counter
count_data = Counter()
count_data[1] = 10
query = 2
if query in count_data.values():
    print('yes')

答案 3 :(得分:0)

stuff = 'value to check'
if not any((suff in key or stuff in  value) for key, value in dic.iteritems()):
    # do something if stuff not in any key or value

答案 4 :(得分:-1)