优秀的编程知识分享平台

网站首页 > 技术文章 正文

Python第79题:字典键值交换【PythonTip题库精编300题】

nanyue 2024-12-09 15:55:36 技术文章 7 ℃

1、编程试题:

编写一个程序来交换字典的键和值。

定义函数swap_dict(),参数为一个字典dict。

在函数内部,反转给定字典的键和值。如果一个值出现多次,将对应键组合在一个列表中。

示例输入

{'Pizza': 'Food', 'Pasta': 'Food', 'Water': 'Drink', 'Coke': 'Drink'}

示例输出

{'Food': ['Pizza', 'Pasta'], 'Drink': ['Water', 'Coke']}

解释:

输入中Food的值出现多次,因此Food的键被保留在一个列表中['Pizza','Pasta']。

2、代码实现:

#!/usr/bin/python3.9
# -*- coding: utf-8 -*-
#
# Copyright (C) 2024 , Inc. All Rights Reserved
#
# @Time      : 2024/1/26 22:06
# @Author    : fangel
# @FileName  : 79. 字典键值交换.py
# @Software  : PyCharm

def swap_dict(dict):
    keyList = []
    valueList = []
    resDict = {}
    #步骤1:按照题意,翻转给定字典的键和值,因此定义两个列表,将键和值反向存储
    for key,value in dict.items():
        keyList.append(value)
        valueList.append(key)
    tmp = []
    #步骤2:针对翻转后的key列表,进行循环判断
    for i in range(0,len(keyList)):
        #如果key元素不在字典里
        if keyList[i] not in resDict:
            #那么定义一个临时列表,用于存放key对应的value值(因为可能有多个)
            tmp = []
            #先将value加进去
            tmp.append(valueList[i])
            #将临时value列表赋值给字典的键
            resDict[keyList[i]] = tmp
        #如果key元素已经添加到字典里来了,再添加时,需要添加该key对应的其他value值
        else:
            #先获取已经键的值resDict[keyList[i]],然后再将后面的value合并到一起,形成一个新的value值
            value = resDict[keyList[i]] + valueList[i].split()
            #再将汇总后的value列表赋值给字典的键
            resDict[keyList[i]] = value
    return resDict

# 读取输入的字典
dict = eval(input())
# 调用函数
print(swap_dict(dict))

3、代码分析:

详见编码的注释,需要注意的是需要检查后存入的键值对重的键是否在字典中已经存在

4、运行结果:

输入:

{'Paris': 'City', 'France': 'Country', 'Europe': 'Continent', 'Berlin': 'City', 'Germany': 'Country'}

输出:

{'City': ['Paris', 'Berlin'], 'Country': ['France', 'Germany'], 'Continent': ['Europe']}

最近发表
标签列表