Python:使用2个列表创建地图

Python:使用2个列表创建地图,python,python-3.x,Python,Python 3.x,我想从2个列表数据创建地图数据。我有一个简单的例子如下。我想做的是创建“新地图”数据,如下所示。如果它包含特定数据,则该值应为True all_s = ['s1', 's2', 's3', 's4'] data = ['s2', 's4'] new_map = {'s1': False, 's2': True, 's3': False, 's4': True} 有没有什么聪明的方法(比如lambda)来实现这一点?我的python环境是3.X。 当然,我可以解决这个问题,如果我使用国际热核聚变

我想从2个列表数据创建地图数据。我有一个简单的例子如下。我想做的是创建“新地图”数据,如下所示。如果它包含特定数据,则该值应为True

all_s = ['s1', 's2', 's3', 's4']
data = ['s2', 's4']
new_map = {'s1': False, 's2': True, 's3': False, 's4': True}
有没有什么聪明的方法(比如lambda)来实现这一点?我的python环境是3.X。
当然,我可以解决这个问题,如果我使用国际热核聚变实验堆简单。但我想知道还有更好的方法。

这应该以一种类似蟒蛇的方式快速有效地完成:

 data_set = set(data)
 new_map = {k: k in data_set for k in all_s}
试试看:


我会用字典来理解:

x = {i:True if i in data else False for i in all_s}

我能做到!new_map={s:True如果(数据中的s)对于所有_中的s,否则为False}请参见下面的答案
True if(s in data)else False
s in data
相同,只是更详细。是的,我注意到你的答案更好。但我想把我的解决方案作为我的研究记录下来。谢谢你的评论。Arg…比我快几秒钟。使用
set()
也是个好主意;我没想到!尽管如此,函数调用会让它变得更昂贵吗?如果你在理解:)中构建集合,那么使用集合没有任何好处。很抱歉,我在智能手机上懒散地打字,不想再使用其他线路。我会更新。使用set func有什么意义吗?@jef,
k在data\u set
中比
k在data
中快,如果数据很大。如果您需要检查大量的密钥,并且数据相当大,那么使用集合是值得的。谢谢。这是非常重要的smart@elethan你能解释一下为什么布尔类型(True或False)是返回值而不是值吗?@Monica这里我将每个键值对中的值设置为数据中的
I
<数据中的code>i=
True
如果
i
data
中包含的值,则
False
否则,所有值都将以
True
False
结束。这有道理吗?@elethan是的,有道理!谢谢你的解释!:)
x = {i:True if i in data else False for i in all_s}