gpt4 book ai didi

使用 map 和 lambda 的 python 字典赋值

转载 作者:太空狗 更新时间:2023-10-30 02:41:55 26 4
gpt4 key购买 nike

我只是想知道以下循环是否可以使用 map() 而不是使用 for 循环?如果是,请告诉我怎么做?或者执行以下操作的最有效方法是什么?

f = open('sample_list.txt').read().split('\n')

val = lambda x: re.match('[a-zA-z0-9]+',x).group() if x else None

for line in f:
if line.find('XYZ') == -1:
dict[val(line)]=0
else:
dict[val(line)]=1

这个程序读取一个格式如下的文件:

ABCD XYZ 
DEFG ABC

然后创建一个字典,第一个词作为 KEY,如果第二个值是 XYZ 那么它将分配一个值 1 否则 0。

即字典将是:

{'ABCD': 1, 'DEFG': 0}

更新:

我对 @shx2@arekolek 建议的方法进行了计时字典理解速度更快,@arekolek 的方法比任何方法都快,因为它不使用我声明的 val() lambda 函数。

代码:

def a():
return {
val(line) : 0 if line.find('XYZ') == -1 else 1
for line in f
}

def b():
return dict(map(lambda x: (x[0], int(x[1] == 'XYZ')), map(str.split, f)))

def c():
return {k: int(v == 'XYZ') for k, v in map(str.split, f)}

print 'a='+timeit.timeit(a)
print 'b='+timeit.timeit(b)
print 'c='+timeit.timeit(c)

结果:

a = 13.7737597283
b = 6.82668938135
c = 3.98859187269

感谢两位展示这个:)

最佳答案

更好用dict comprehension map

可以这样做:

my_dict = {
val(line) : 0 if line.find('XYZ') == -1 else 1
for line in f
}

一些注意事项和改进:

  1. dict 在 python 中不是一个好的变量名
  2. 复杂表达式的替代方案 0 if line.find('XYZ') == -1 else 1:
    • int(line.find('XYZ') != -1)(将 bool 转换为 int)
    • 如果您可以将值保留为 bool:line.find('XYZ') != -1
    • 'XYZ' 行(来源:@JonClements)

关于使用 map 和 lambda 的 python 字典赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38050928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com