2017-06-21 152 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

是的,你可以把它稱爲便便和小便 –