网站首页 > 技术文章 正文
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']}
- 上一篇: python读书笔记之列表和字典
- 下一篇: Python两个列表合并字典:实用技巧解析
猜你喜欢
- 2024-12-09 Python两个列表合并字典:实用技巧解析
- 2024-12-09 python读书笔记之列表和字典
- 2024-12-09 Python 动手练:字典
- 2024-12-09 python教程从基础到精通,第7课—Dictionary(字典)
- 2024-12-09 Python中list()方法和list列表的使用
- 2024-12-09 python列表增加
- 2024-12-09 Python 创建字典的多样方法
- 2024-12-09 15个例子掌握Python列表,集合和元组
- 2024-12-09 Python基础:Python列表更新之修改列表元素详解
- 2024-12-09 python集合set添加元素的两种方法
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)