欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

你确定你会遍历字典?那将字典的键key和值value互换呢?

程序员文章站 2022-06-05 13:09:56
...

字典的遍历和将字典的键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 

如果对你有帮助,不要忘记点赞收藏关注哦!