使用defaultdict搜索键/值

2 投票
5 回答
12506 浏览
提问于 2025-04-17 10:31

我对标准字典中的iteritems()和items()的用法很熟悉,这两个方法可以和for循环一起使用,来遍历字典中的键和值。不过,我想知道如何在默认字典(default dict)中最好地做到这一点。比如,我想检查一个特定的值是否没有出现在任何键或者与任何键关联的值中。目前我正在尝试以下方法:

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

但是我得到了以下结果:

1 deque([2, 2])

我对变量和字典有以下声明:

from collections import defaultdict, deque
clusterdict = defaultdict(deque)

那么我该如何更好地获取键值呢?谢谢!

5 个回答

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')
2

如果我理解你的问题是这样的:

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

除非你想表达其他意思……

3

一般来说,对于一个叫做 dd 的 defaultdict,如果你想检查某个值 x 是否被用作键,可以这样做:

x in dd

如果你想检查 x 是否被用作值,可以这样做:

x in dd.itervalues()

在你的情况下(一个值是双端队列的 defaultdict),你可能想看看 x 是否在任何一个双端队列里:

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

记住,defaultdict 的行为和普通字典差不多,只是当你查找一个不存在的键时,它会自动创建一个新的条目;除此之外,它和普通字典没有什么不同。

撰写回答