如何从多值字典中的任何分配值中获取键



我不确定字典是否是要走的路,但我制作了一个包含 1-7 个项目列表的字典。我想访问给定列表中任何项目的密钥。这可能吗?我找到了一种方法来访问给定一个值的键(字典中按值获取键(,但如果有多个值怎么办?我的最终目标是在给定一个单独的字符串(字符串 B(的情况下重复一个字符串(字符串 A(,该字符串被归类为字符串 A。例如,"类别 A"包含 aa、bb、cc,"分类 B"包含 a、b、c。[aa, a, bb, aa, c, b, aa] 的列表等于:[A, B, 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 这样的东西也可以工作,但我不知道如何实现这个概念。

我想你需要一些与您链接的问题中接受的答案非常相似的东西,但与其测试相等性,不如测试是否包含在列表中。另外,您忘记在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)

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

例如,您可以像此答案一样反转字典。 您甚至可以使用一个衬垫(不打字(

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:在谷歌中搜索python反向词典给你很多选择。特别看到这个。

不确定您的最终目标,但字典不会用于这种情况。

通常,"按值查找"不是您希望使用字典的方式。如果确实如此,您应该翻转键和值,以便最终使用该值作为键。

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的每个值。现在,这有一个警告,如果你的"值"集具有相同的值,例如{ 'A': ['a'], 'B': ['a'] }那么这将"丢失"多个键具有相同值的信息。

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

该结构可以通过集合、列表、字典等来实现。这是一个相当不错的,其他或多/少复杂的实现很容易在网络上找到。

相关内容

最新更新