Python 检查列表是否包含密钥

Python 检查列表是否包含密钥,python,Python,我试图检查列表是否包含键 我有一本我已经整理过的字典,相信它能把它变成一个列表。现在,我想查看该列表中的密钥 以下是我的代码,告诉你我在哪里: drinkDict = {'drink1': drinkTimes[0],'drink2': drinkTimes[1],'drink3': drinkTimes[2],'drink4': drinkTimes[3],'drink5': drinkTimes[4]}; print drinkDict for k, v in drinkDi

我试图检查列表是否包含键

我有一本我已经整理过的字典,相信它能把它变成一个列表。现在,我想查看该列表中的密钥

以下是我的代码,告诉你我在哪里:

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”等


我不确定这里的术语,所以如果我错了,请纠正我,这样我可以更好地搜索解决方案。

您已经打印了
排序的\u x
的第一项,您可以看到它是一个元组,而不是字符串。检查字符串
'drink\u 1'
是否处于
排序\u x
中永远不会起作用

正如Daniel在评论中指出的,您可能不想使用元组的排序列表,在您的dict上查找要容易得多:

if 'drink1' in drinkDict:
   ...

还请注意,您可以根据值进行排序,这些值是字符串而不是数字。这意味着你要按字母顺序排序,而不是按数字排序。您可能需要调整排序键以将它们转换为float,或者只将它们存储为float即可。

您可以重用前面的
操作符。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))

转换为列表和排序有什么意义?如果您将其保留为dict,则查找会容易得多。我如何知道哪个字典值最小?@BluGeni这是您的目标吗?我正在尝试获取的不仅仅是最小值。我需要知道哪一个是第二个最小的,依此类推,这5个饮料是不是一本字典?@BluGeni No,这是一个由两个元组组成的列表,如上面的注释所示。如果您想要一个排序字典,您需要使用类似于
OrderedDict
from
collections
的内容,因为字典不能保证键的顺序。您可以通过在解释器中运行代码来进行测试,并执行类似于
type(sortedItems)
的操作。好的,谢谢您的解释,但我认为这让我完全不知道如何检查drink1是否在解释器中list@BluGeni回到我答案的第一行<代码>映射中的'drink1'(operator.itemgetter(0),sortedItems)。在解释器中运行代码,然后查看
map(operator.itemgetter(0),sortedItems)
生成的内容。