扩展not_speshal's answer:
导致多个布尔打印的原因是什么?
您的代码中的问题是:
- 在循环中打印将为 dict 中的每个条目打印
- 不返回,表示遍历整个字典
迭代求解
您可以解决这些问题、改进代码并一步一步地学习(迭代地)。
1。让它返回
# rename from `valueDict` to a question in order to signal boolean return
def hasKeyWithValue(key,value):
for i, j in WaywardSonDict.items():
if i == key and j == value:
return True
# no else, simply continue looping to the end
return False # if not found and returned, finally return False
print(hasKeyWithValue('Genre', 'Hard Rock') # prints: True
设计建议:重命名函数来表示预期的布尔值。这可以通过将其命名为 question 来完成。
2。使用 dict 的 getter 函数代替循环
def hasKeyWithValue(key,value):
if WaywardSonDict.get(key) == value:
return True
else:
return False
那么你需要一个完整的 if-else。
或者,您可以将 else 替换为 default 返回:
def hasKeyWithValue(key,value):
if WaywardSonDict.get(key) == value:
return True # that's the "unexpected"
return False # that's the default
注意:这里是.get is special,因为如果没有找到密钥,它会返回None。
这允许像 hasKeyWithValue('Year',None) 这样的不存在检查,它将返回 True,因为给定的字典没有带有键 Year 的条目。
3。简化 if-return
def hasKeyWithValue(key,value):
return (WaywardSonDict.get(key) == value)
简化测试。 if-else 语句已过时,因为布尔表达式(括号内)的计算结果为 True 或 False。
4。内联简单测试
key = 'Genre'
value = 'Hard Rock'
print(WaywardSonDict.get(key) == value)
因此,hasKeyWithValue 函数已被一个简短的语义词典测试(大多数 Python 开发人员都能理解)取代。
5。提高可读性
# format like a table to ease reading
WaywardSonDict = {
"Artist" : "Kansas",
"Song" : "Carry on Wayward Son",
"Genre" : "Hard Rock",
"Album" : "Leftoverture",
"Writer" : "Kerry Livgren"
}
通过这种方式,您可以像检查清单一样轻松扫描字典条目。