首页 > 解决方案 > 如何使用 map 根据一行代码中的条件返回修改后的字典?

问题描述

您好,我应该编写一个CustomOp(d)接受 dict d 并以下列方式使用的函数:

dict(map(CustomOp(d), d.items()))

该函数应该有助于根据以下条件修改 dicts 值:

  1. 如果 dict 仅包含整数:将每个值加倍。
  2. 如果它只包含字符串:反转每个字符串。
  3. 如果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 转换为序列

我不知道如何让这条线工作,以及如何使它更短,经过相当长的时间后,我决定放弃并问你们。

标签: pythondictionarylambda

解决方案


试试这个来解决问题:

    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语句括在括号中,该函数按预期工作。你的逻辑很好。您只是没有考虑运算符优先级/分组...


推荐阅读