python - 如何使用 map 根据一行代码中的条件返回修改后的字典?
问题描述
您好,我应该编写一个CustomOp(d)
接受 dict d 并以下列方式使用的函数:
dict(map(CustomOp(d), d.items()))
该函数应该有助于根据以下条件修改 dicts 值:
- 如果 dict 仅包含整数:将每个值加倍。
- 如果它只包含字符串:反转每个字符串。
- 如果dict包含其他类型或多种不同类型:返回未修改的dict
另外该函数CustomOp(d)
应该写在一行代码中(忽略头部obv)
到目前为止,这是我能够做到的。建议谨慎行事!
def UseOp(d):
return dict(map(CustomOp(d), d.items()))
def CustomOp(d):
return lambda t:tuple([t[0],t[1]*2]) if all(type(v)==int for v in d.values()) else lambda t:tuple([t[0],t[1][::-1]]) if all(type(v)==str for v in d.values()) else lambda t:t
它仅在 Dict 仅包含整数时才有效,否则我会得到:
TypeError:无法将字典更新序列元素#0 转换为序列
我不知道如何让这条线工作,以及如何使它更短,经过相当长的时间后,我决定放弃并问你们。
解决方案
试试这个来解决问题:
def CustomOp(d):
return (lambda t:tuple([t[0],t[1]*2])) if all(type(v)==int for v in d.values()) else (lambda t:tuple([t[0],t[1][::-1]])) if all(type(v)==str for v in d.values()) else lambda t:t
if
问题是如何在-else
语句和语句之间对事物进行分组lambda
。通过将您的lambda
语句括在括号中,该函数按预期工作。你的逻辑很好。您只是没有考虑运算符优先级/分组...
推荐阅读
- python - 比较python中三个列表之间的值返回重复产品的计数
- python-3.x - 在输出文件中的某个字符串之后搜索数字?
- java - 使用弹簧数据启用休眠日志记录?
- install4j - install4j 需要客户端系统上的 jre 吗?
- xml - 是否有任何工具可以对多个服务器的 Config xml 文件执行自动变量替换?
- c++ - 有没有更好的方法可以接收这个输入?C++
- sql - 没有附加查询的答案?
- pytorch - 为什么我在测试集上收到 Pytorch 运行时错误
- android - Android 使用 mime 类型 GIF 保存 MediaStore 图像
- c++ - PN532 试图从 Felica 标签获取设备型号