我正在使用Python3。我有3个组,在这些组中,我有多个值。
我拥有所寻找的价值,并且希望得到他的支持。例如,如果我有CCC
,我需要得到GROUP 1
;如果我有HHH
,我要GROUP 3
,然后根据组别进行操作。
所以我想我要创建一个这样的字典(如果我错了,请告诉我):
{
'group1': {'AAA','BBB','CCC','DDD'},
'group2': {'EEE','FFF','GGG'},
'group3': {'HHH','JJJ'}
}
所以我看到我们可以还原dict以从值中获取键,所以我想这样做:
dict = {
'group1': {'AAA','BBB','CCC','DDD'},
'group2': {'EEE','FFF','GGG'},
'group3': {'HHH','JJJ'}
}
revdict = dict([(dict[key],key) for key in dict])
group = revdict['CCC']
if group == 'group1':
# Do something
elif group == 'group2':
# Do something
elif group == 'group3':
# Do something
但是我不认为这是做我想要的事情的好方法。有一种方法可以执行以下操作:
if 'CCC' in dict :
# Then get the current key. How ?
或者也许我不需要创建dict而是其他东西?我接受您的所有建议。
答案 0 :(得分:1)
您反转的dict
(通常称为反转索引)将失败,因为您将集合用作键。集合是可变的,不能将它们散列以形成dict
键。取而代之的是,您可能希望组中的每个元素组成一个密钥。
您可以使用defaultdict
重写正确的反向索引。
from collections import defaultdict
groups = {
'group1': {'AAA', 'BBB', 'CCC', 'DDD'},
'group2': {'EEE', 'FFF', 'GGG'},
'group3': {'HHH', 'JJJ'}
}
inverted_index = defaultdict(set)
for name, group in groups.items():
for element in group:
inverted_index[element].add(name)
print('group1' in inverted_index['AAA']) # True
print('group1' in inverted_index['EEE']) # False
在倒排索引中,一个元素可能具有指向它的多个键(即使您的数据中不是这种情况),这就是每个值必须是键的set
的原因。
如果您在评论中似乎已经声明过,如果确保您的数据仅具有一对一的对应关系,那么您只需创建一个dict
。
inverted_index = {element: name for name, group in groups.items() for element in group}
print(inverted_index)
{'AAA': 'group1',
'BBB': 'group1',
'CCC': 'group1',
'DDD': 'group1',
'EEE': 'group2',
'FFF': 'group2',
'GGG': 'group2',
'HHH': 'group3',
'JJJ': 'group3'}
答案 1 :(得分:0)
您可以使用 list comprehension 来检索key
,并且仅在您要查找的key
位于str
中时返回values
d = {
'group1': {'AAA','BBB','CCC','DDD'},
'group2': {'EEE','FFF','GGG'},
'group3': {'HHH','JJJ'}
}
a = [i for i in d if 'CCC' in d[i]]
# ['group1']
答案 2 :(得分:0)
我坚持不使用索引作为键,
answer = None
for key in d.keys():
if "CCC" in d[key]:
answer = key
break
* @ Olivier建议的编辑
答案 3 :(得分:0)
for k,v in dict.items():
if 'CCC' in v:
print(k)
您无法逃脱循环或逆向指令。如果您没有内存限制,请使用逆向字典。