我有以下工作者字典(每个值2个键):
worker = {('admin', 'unknown'): 1, ('worker1', 'Paul'): 1, ('worker2', 'Francis'): 1}
在我的代码中,我想检查一个worker函数是否已经有一个条目:
if work['function'] in worker:
# increment amount
为什么这不是真的? work['function']
将为admin
或worker1
等。
是否因为我必须在if
中指定dict的第二个键?因为我不能/不想那样做
我怎样才能说明这一点?
答案 0 :(得分:1)
词典的关键是一个元组,如('admin', 'unknown')
。您可以轻松地测试这是否有效:
if ('admin', 'unknown') in worker:
print("toto")
因此,如果您希望能够仅检查是否存在管理员,则有两种选择:
执行你所描述的词汇的dict示例:
worker = {'admin':{'unknown': 1}, 'worker1':{'Paul': 1}, 'worker2':{'Francis': 1}}
if 'admin' in worker:
print("Here is admin")
在你的情况下,你可能更想要一个简单的字典,因为你显然总是只有一组与一个键对应的值,所以简单地说:
worker = {'admin': ('unknown', 1), 'worker1': ('Paul', 1), 'worker2': ('Francis', 1) }
答案 1 :(得分:0)
你可以使用
itemgetter
轻松获得关键元组的第一项。
from operator import itemgetter
if work['function'] in map(itemgetter(0), worker):
# increment amount
答案 2 :(得分:0)
Python不会将这样的词典解释为"每个值的两个键",但是"键是元组"。这意味着('admin', 'unknown') in worker
将产生True
,但不会产生'admin' in worker
。
如果您希望每个条目具有多个键的字典,则需要不同的数据结构。您可以构建自己的或使用现有的the multi_key_dict package。
你也可以遍历键并搜索你的字符串是否包含在键中,如下所示:
for k in worker.keys():
if work['function'] in k:
return k
答案 3 :(得分:0)
如果您不想指定密钥的第二部分,可以使用列表解析来查找与密钥的第一部分匹配的所有内容。请注意,性能是线性的,而不是O(1),就像从哈希表中获得的那样。
worker = {('admin', 'unknown'): 1, ('worker1', 'Paul'): 1, ('worker2', 'Francis'): 1}
matching_keys = [key for key in worker if key[0] == "admin"]
for key in matching_keys:
worker[key]+=1
print worker