我不确定字典是否可行,但我制作了一个包含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这样的东西也可以工作,但我不知道如何实现这个概念。
答案 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上轻松找到其他更复杂/更简单的实现。