繁体   English   中英

如何使用 map 在一行代码中根据条件返回修改后的字典?

[英]How can I use map to return a modified dictionary based on conditions in one line of code?

您好我应该写一个 function CustomOp CustomOp(d) ,它需要一个 dict d 并以下列方式使用:

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

function 应该根据以下条件帮助修改 dicts 值:

  1. 如果 dict 仅包含整数:将每个值加倍。
  2. 如果它只包含字符串:反转每个字符串。
  3. 如果dict包含其他类型或多种不同类型:返回未修改的dict

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM