我正在尝试检查列表是否包含密钥。
我有一个字典,我已经排序并相信它将其变成一个列表。现在我想检查一下密钥列表。
以下是我的代码,可以了解我的位置:
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"等等。
我不确定这里的术语所以请纠正我,如果我错了,那么我可以更好地寻找解决方案。
答案 0 :(得分: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))
答案 1 :(得分:0)
您已打印sorted_x
的第一项,您可以看到它是一个元组,而不是一个字符串。检查字符串'drink_1'
是否在sorted_x
中是不可行的。
丹尼尔在评论中指出,你可能不想使用排序的元组列表,你可以更容易地查找你的字典:
if 'drink1' in drinkDict:
...
另请注意,您对值进行排序,这些值是字符串而不是数字。这意味着您按字母顺序排序,而不是数字排序。您可能希望调整排序键以将它们转换为float,或者只是将它们存储为浮点数。