2017-06-21 101 views
0

我有一本字典,其中每个按键都有数据作为其值的若干名单这样如何从值为列表的字典中获取键值?

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和v很多,即使没有OP提及它们,所以我想知道k和v是否已经在字典中设置为变量?

+4

'myDict'没有使用有效的Python语法定义 – CoryKramer

+0

k和v是Key和Value的短名称。它们没有特殊含义(即它们是普通的变量名称),但是如果以这种方式命名,它们更容易理解它们引用的内容。 – GPhilo

+0

应该'myDict'是'myDict = {'data1':[['data_d','dataD '],[' DATA_E”, 'dataE'],[ 'DATA_F', 'DATAF']]}'? – depperm

回答

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使用词典纯粹是可选的,不是特殊的属性,除了是为“关键”和“价值”很短的缩写。

请注意,如果预计只发生一次匹配,可以通过在找到一个搜索后停止搜索来使代码更高效。这里有一种方式:

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)) 
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] 
+0

这似乎奏效了!非常感谢你!我不明白,python会自动理解k和v代表字典中的键和值吗?我从未在其他地方定义过他们。或者你所使用的结构已被定义为关键和价值?我可以在dic.items()中说出'水果,苹果'吗?''而不是它仍然会工作? – JimKM

+0

是的,你可以把它称为便便和小便 –

相关问题