python - 如何减少 lambda 表达式中辅助函数的使用?

在这个例子中,我从一个集合中取出字母并将它们附加到字典中,其中字母成为键,文字 1 成为每对的值。

def base_dict_from_set(s):
    return reduce(lambda d,e : addvalue(1, e, d), s, dict())


def addvalue(value, key, d):
    d[key] = value
    return d
>>> base_dict_from_set(set("Hello World!".lower()))
{'o': 1, '!': 1, 'l': 1, 'd': 1, 'w': 1, ' ': 1, 'r': 1, 'e': 1, 'h': 1}

我想知道我是否可以以某种方式摆脱“addvalue”辅助函数并添加元素并在 lambda 函数本身中引用修改后的字典。

addvalue 本身的例程对我来说非常简单,所以我更喜欢这样的东西:

def base_dict_from_set(s):
    reutrn reduce(lambda d,e : d[e] = 1, s, dict())

我在 python 方面的经验不多,而且我是从函数式编程的角度出发的。我的目标是了解 python 的功能,但我太缺乏经验,无法正确地表达和谷歌我正在寻找的内容。

最佳答案

您正在尝试做的是 dict.fromkeys 存在的原因:创建一个字典,将每个键映射到相同的常量值。

>>> dict.fromkeys("Hello World!".lower(), 1)
{'h': 1, 'e': 1, 'l': 1, 'o': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1, '!': 1}

无需先将字符串转换为,因为任何重复项都会被以下事件覆盖。

(如果常量值是可变的,您应该使用字典理解来确保每个键都获得其自己的可变值,而不是每个键都共享对相同可变值的引用。)

https://stackoverflow.com/questions/69132206/

相关文章:

java - 没有同步顺序的程序

reactjs - 如何更改Chakra UI Toast组件的背景颜色?

indexing - 为什么索引 HashMap 不返回引用?

angular - 延迟加载模块时构建错误

ruby-on-rails - Rails 参数方法 : Why can it be accesse

reactjs - RTK查询 |使来自另一个 API 服务的 API 服务的缓存无效

reactjs - Material-UI:一个组件正在将 SwitchBase 不受控制的检查状态

visual-studio-code - 如何在VSC终端创建文件?

node.js - express-session不设置cookie?

node.js - 如何在带有 Nest.js 的 Node 中分离客户端和服务器应用程序时获取用户