我有一个字典,其中每个键都有几个数据列表作为其值
myDict = {'data1' : ['data_d','dataD']['data_e','dataE']['data_f','dataF']}
我希望能够输入列表中的一个值,然后给出密钥。这样我就可以获得列表中的其他值,因为我有密钥。
我已经尝试了
dataKey = (list(myDict.keys())[list(myDict.values()).index(dataD)])
但那不起作用
我也试过
for k, v in myDict.items():
if 'dataD' in v:
print k
但这也不起作用。
附带问题,在我看过的问题中,我看到人们使用变量k和va很多甚至没有OP提及它们,所以我想知道k和v是否已经在字典中设置了变量?
答案 0 :(得分:0)
如果它们都是列表,那么你可以做这样的事情(如果我理解正确的话)
myDict = {
'data1': [['data_d','dataD'], ['data_e','dataE'], ['data_f','dataF']],
}
def find(dic, item):
for k, v in dic.items():
for ls in v:
if item in ls:
return k
return False
print(find(myDict, "data_d"))
# OUT [data1]
答案 1 :(得分:0)
你的第二次尝试几乎是正确的,但是需要一个嵌套的for
循环来遍历列表列表:
myDict = {'data1' : [['data_d','dataD'], ['data_e','dataE'], ['data_f','dataF']]}
for key, value in myDict.items():
for sublist in value:
if 'dataD' in sublist:
print(key) # -> data1
将名为k
和v
的变量与字典一起使用纯粹是可选的,不是特殊属性 - 除了是“key”和“value”的非常短的缩写。
请注意,如果预计只发生一次匹配,则可以通过在找到一个匹配后停止搜索来提高代码效率。这是一种方法:
target = 'dataD'
try:
for key, value in myDict.items():
for sublist in value:
if target in sublist:
print(key) # -> data1
raise StopIteration # found, so quit searching
except StopIteration:
pass # found
else:
print('{} not found'.format(target))