如何通过字典的值获取对应的键?

3

我有一个类似以下的字典:

d = {"employee": ['PER', 'ORG']}

我有一个从特定实体列表中提取出来的标签 ('PER', 'ORG',....)列表。

for t in entities_with_tag: # it includes words with a tag such as: [PER(['Bill']), ORG(['Microsoft']), 
    f = t.tag # this extract only tag like: {'PER, ORG'}
    s =str(f)
    q.add(s)

现在我想要做的是,如果q中包含{'PER, ORG'},并且它与d.values()匹配,那么它应该给我{'PER, ORG'}keys,即'employee'。我尝试了这个方法但不起作用。
for x in q:
   if str(x) in str(d.values()):
       print(d.keys()) # this print all the keys of dict.
4个回答

2

如果我理解正确,你应该循环字典而不是标签列表。你可以使用集合检查字典标签是否在列表中。

最初的回答:

如果我理解正确,你应该循环字典而不是标签列表。你可以使用集合检查字典标签是否在列表中。

d = {"employee": ['PER', 'ORG'],
    "located": ["ORG", "LOC"]}
q = ["PER", "ORG", "DOG", "CAT"]
qset = set(q)
for key, value in d.items():
    if set(value).issubset(qset):
        print (key)

输出:

employee

我遇到了一个新问题,假设我们有 "employee": ["PER", "LOC"]"Located": ["ORG", "LOC"]。由于 "LOC" 出现在两个键中,它会返回两个键,但我希望只返回当两个值都相同时的结果,而不是其中一个值。请问该如何解决这个问题? - Zia
除非您的查询中包含“LOC”,否则它不应返回“Located”(实际上不会)。 - Hirabayashi Taro
不幸的是,它返回了两个键,因为我在两个地方都有“LOC”。如何使两个值相同而不仅仅是一个。 - Zia
我不明白。现在,为了返回键,两个值都必须在q中。如果这不是预期的行为,就像我说的那样,可能是因为您的q列表中同时有“ORG”和“LOC”。因此,在标签提取过程中必须进行一些更改。 - Hirabayashi Taro
实际上它并不匹配一个值。我更新了我的答案,这样你就可以自己尝试代码了。 - Hirabayashi Taro
显示剩余2条评论

1

你的意思是什么?什么都没有吗?

for x in q:
   if str(x) in d.values():
       print(d.keys())

它不会打印任何东西。 - Zia
@Zia 哎呀,奇怪了,再复制一遍。 - U13-Forward

0
你可以将字典中的键和值进行交换,然后通过键来访问。
tags = ('PER', 'ORG')
data = dict((val, key) for key, val in d.items())
print(data[tags])

注意将列表转换为元组,因为列表不可哈希。

另一种解决方案是在循环中提取键和值。但这绝对不是高效的方法。

for x in q:
    if str(x) in str(d.values()):
        for key, val in d.items():
            if val == x:
                print(key) # this print all the keys of dict.

0
你可以创建两个列表,一个包含键,另一个包含值。然后,在值列表中所需值的索引处,您可以从键列表中调用相应的键。
    d = {"employee": ['PER', 'ORG']}

    key_list = list(d.keys()) 
    val_list = list(d.values()) 

    print(key_list[val_list.index(['PER','ORG'])

参考:https://www.geeksforgeeks.org/python-get-key-from-value-in-dictionary/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接