如何从多值字典中的任何指定值中获取密钥

时间:2017-07-18 04:22:46

标签: python dictionary indexing

我不确定字典是否可行,但我制作了一个包含1-7项列表的字典。我想访问列表中任何项目的密钥。这可能吗?我找到了一种方法来访问给定一个值(Get key by value in dictionary)的键,但是如果有多个值会怎么样?我的最终目标是在给定一个单独的字符串(字符串B)的情况下重复一个字符串(字符串A),该字符串在字符串A下分类。例如,'类别A'包含aa,bb,cc和' Cateogry B'包含a,b,c。 [aa,a,bb,aa,c,b,aa]列表等于:[A,B,A,A,B,B,A]。这是我到目前为止的尝试,但它不起作用。

dict = {'A':['aa', 'bb', 'cc'],'B':['a','b','c'] }
nwlst = []
lst = [aa, a, bb, aa, c, b, aa]
for i in lst:
    if i in dict.values():
        nwlst.append([list(dict.keys())[list(dict.values()).index([str(i)])]])

也许使用像grep这样的东西也可以工作,但我不知道如何实现这个概念。

3 个答案:

答案 0 :(得分:1)

不确定您的最终目标,但字典不会用于此类案例。

通常"按价值查找"不是你想要如何使用字典。如果确实如此,您应该翻转键和值,以便最终将值用作键。

dict = {
  'aa': 'A',
  'bb': 'A',
  'cc': 'A',
  'a': 'B',
  'b': 'B',
  'c': 'B',
}

这样你就可以正确地获取它,因此如果你必须从值到键查找然后给定用例,你更有可能将你的原始字典转换成这个版本的字典进行查找。

dict = {'A':['aa', 'bb', 'cc'],'B':['a','b','c'] }
values_to_keys_dict = {}
for key, values in dict:
  for value in values:
    values_to_keys_dict[value] = key

lst = ['aa', 'a', 'bb', 'aa', 'c', 'b', 'aa']
for i in lst:
  values_to_keys_dict[i] # To get the "key"

这样,您只扫描所有值一次,而不是扫描lst中的每个值,扫描所有值。现在,这有一个警告,如果您的"值" set具有相同的值,例如{ 'A': ['a'], 'B': ['a'] },那么这将导致"失去"多个键具有相同值的信息。

答案 1 :(得分:1)

我猜你在链接的问题中需要与the accepted answer非常相似的东西,但不是测试相等性,而是测试是否包含在列表中。另外,您忘记在lst中使用引号。

dict = {'A':['aa', 'bb', 'cc'],'B':['a','b','c'] }
newlst = []
lst = ['aa', 'a', 'bb', 'aa', 'c', 'b', 'aa']
for search_v in lst:
    for k, v in dict.items():
        if search_v in v:
            newlst.append(k)

还有其他选项,与链接问题中的其他答案相关。

例如,您可以像this answer中那样反转字典。 您甚至可以使用一个衬垫(不是tetsted)

dict = {'A':['aa', 'bb', 'cc'],'B':['a','b','c'] }
new_dict = {iv: k for k, v in dict.items() for iv in v}

然后

newlst = []
lst = ['aa', 'a', 'bb', 'aa', 'c', 'b', 'aa']
for search_k in lst:
    newlst.append(new_dict[search_k])

这也有一个衬垫。

PS:在Google中搜索 python反向词典可以为您提供很多选择。特别参见this

答案 2 :(得分:0)

考虑Disjoint Set数据结构。在使用Union方法将['aa','bb','cc']和['a','b','c']组成不相交的子集后,Find方法将返回相应的父对象。

可以使用集合,列表,字典等来实现结构。Here是一个相当不错的结构,可以在Web上轻松找到其他更复杂/更简单的实现。