你确定你会遍历字典?那将字典的键key和值value互换呢?
字典的遍历和将字典的键key和值value互换
当你遇到这样一个问题,一段数据是这样存储在一个字典中,现在需要根据字典的值value而取出对应的键key。
**水果的名称和单价分别是字典的键和值,现在请你取出单价大于4.5的水果 **
fruits = {'banana':3.5,'apple':5,'grape':9,'pear':4.5,'pitaya':6}
下面针对这个问题,我这里给出几种解决方案:
1.遍历字典(的键)
我们知道,水果的单价是字典的值,要想找到单价大于4.5的,那么就必须要遍历字典的值,如果我们这样遍历字典
for key in fruits:
print(key,end=' ') # 输出结果:banana apple grape pear pitaya
可以看到。这样遍历整个字典,我们得到的是它的键key,现在我们在循环内部加上一个判断
for key in fruits:
if fruits[key] > 4.5: # 我们用键去对字典进行索引,取出对应的键来做判断
print(key, end=' ') # apple grape pitaya
当然,遍历字典的键时,我们还可以通过给字典发消息dict.keys()得到它所有的键
for key in fruits.keys():
print(key, end=' ') # 输出结果:banana apple grape pear pitaya
2.遍历字典的值
我们通过给字典发消息dict.values()这样可以得到字典所有的值
print(fruits.values()) # dict_values([3.5, 5, 9, 4.5, 6])
因此,我们可以遍历字典的值
for value in fruits.values():
print(value, end=' ') # 3.5 5 9 4.5 6
但是,我们这样只能找到有多少单价大于4.5的水果,并不能取出对应的水果名。
3.遍历字典的键和值
通过给字典发消息dict.items,可以得到一个将key和value放在二元组中的嵌套列表
例如:
fruits = {'banana':3.5,'apple':5,'grape':9,'pear':4.5,'pitaya':6}
print(fruits.items())
# 输出结果:dict_items([('banana', 3.5), ('apple', 5), ('grape', 9), ('pear', 4.5), ('pitaya', 6)])
这样我们遍历它的键和值加以判断可取出单价大于4.5的水果
for key,value in fruits.items():
if value > 4.5:
print(key, end=' ') # apple grape pitaya
4.将字典的键key和值value互换(面试题)
这里还有一种简单的做法,想像一下,如果我们能将字典的键key和值value互换,得到这样一个字典
{3.5: 'banana', 5: 'apple', 9: 'grape', 4.5: 'pear', 6: 'pitaya'}
那么,现在我们直接去遍历字典的键,然后取出对应的值就找到了想要的名称
实际上将它编程这样的字典也很简单,只需要这样一行代码
dict(zip(fruits.values(),fruits.keys()))
我们可以看到将字典的键和值互换位置后用zip压缩后得到这样的结果
for zip in zip(fruits.values(),fruits.keys()):
print(zip,end=' ')
# 输出结果:(3.5, 'banana') (5, 'apple') (9, 'grape') (4.5, 'pear') (6, 'pitaya')
所以,现在,我们用构造器语法dict()对zip后的对象进行字典构造,就可以得到一个和原字典键和值互换后的新字典
fruits = {'banana':3.5,'apple':5,'grape':9,'pear':4.5,'pitaya':6}
print(dict(zip(fruits.values(),fruits.keys())))
# 就得到了一个和原字典键和值互换后的新字典
# 输出结果{3.5: 'banana', 5: 'apple', 9: 'grape', 4.5: 'pear', 6: 'pitaya'}
现在,我们只需对这个新列表直接去遍历字典的键,然后取出对应的值就找到了想要的名称
new_fruits = dict(zip(fruits.values(),fruits.keys()))
for price in new_fruits:
if price > 4.5:
print(new_fruits[price],end=' ') # apple grape pitaya
如果对你有帮助,不要忘记点赞、收藏加关注哦!
上一篇: 实用CSS 文字收集