2016-03-05 235 views
1

我試圖檢查列表是否包含密鑰。檢查列表是否包含密鑰

我有一本字典,我已經排序,並相信它將它變成一個列表。現在我想檢查一個密鑰的列表。

這裏是我的代碼給一個想法我在哪裏:

drinkDict = {'drink1': drinkTimes[0],'drink2': drinkTimes[1],'drink3': drinkTimes[2],'drink4': drinkTimes[3],'drink5': drinkTimes[4]}; 
    print drinkDict 
    for k, v in drinkDict.items(): 
     if v == '0': 
      del drinkDict[k] 
    sorted_x = sorted(drinkDict.items(), key=operator.itemgetter(1)) 
    print sorted_x 
    print (sorted_x[0] 
    if 'drink1' in sorted_x.key: 
     print "drink1 is present" 
     data = pin_update(VALID_BCM_PIN_NUMBERS[0], 0) 

輸出

{'drink4': u'4.8', 'drink5': u'0.7', 'drink1': u'1.4', 'drink2': u'2.8', 'drink3': u'0'} 
[('drink5', u'0.7'), ('drink1', u'1.4'), ('drink2', u'2.8'), ('drink4', u'4.8')] 
('drink5', u'0.7') 

我只是無法弄清楚如何檢測是否含有sorted_x「 drink1「或」drink2「等。

我不知道這裏的術語,所以請糾正我,如果我wr因此,我可以更好地尋找解決方案。

+1

什麼是轉換點到一個列表和排序?如果將其保留爲字典,查找起來會更容易。 –

回答

1

您可以重用operator.itemgetter較早,但我們這一次在看第一(第0)項:

'drink1' in map(operator.itemgetter(0), sorted_x) # True 

但是,您可能要解釋爲什麼你正在做的這一切。看起來你正在圍繞不同的數據結構跳舞,我不知道是什麼原因。

要由第二值在字典中的項目進行排序:

sortedItems = sorted(drinkDict.items(), key=operator.itemgetter(1)) 

在一般情況下,它看起來像你可以使用如下代碼實現同樣的事情:

import operator 

drinkDict = {'drink1': '2', 
      'drink2': '1', 
      'drink3': '4', 
      'drink4': '3', 
      'drink5': '0' 
      } 

# removes 'drink5': '0' 
filteredDict = {k: v for k, v in drinkDict.items() if v != '0'} 

# [('drink2', '1'), ('drink1', '2'), ('drink4', '3'), ('drink3', '4')] 
sortedItems = sorted(filteredDict.items(), key=operator.itemgetter(1)) 
+0

我想要獲得的不僅僅是最小值。我需要知道下一個最小等5杯酒 – BluGeni

+0

@BluGeni相應更新 –

+0

是sortedItems一個字典嗎? – BluGeni

0

您已打印sorted_x的第一項,您可以看到它是一個元組,而不是一個字符串。檢查字符串'drink_1'是否在sorted_x中永遠不會起作用。

由於丹尼爾在註釋中指出的那樣,你可能不希望有一個元組的排序列表的工作,這是很容易做的字典查找您有:

if 'drink1' in drinkDict: 
    ... 

另外請注意,您排序在值,這是字符串,而不是數字。這意味着你按字母順序排序而不是數字排序。您可能需要調整排序鍵以將它們轉換爲浮點,或者將它們作爲浮點開始存儲。

+0

我怎麼知道哪個字典值最小? – BluGeni

+0

@BluGeni這是你的目標嗎? –