2016-03-05 237 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这是你的目标吗? –