Python 列表理解中的动态变量
我正在尝试创建一个字典列表,其中包含基于另一个变量的值Python 列表理解中的动态变量,python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,我正在尝试创建一个字典列表,其中包含基于另一个变量的值 from random import choice, randint male_names = [ 'Bob', 'John' ] female_names = [ 'Alice', 'Cathrine' ] mylist = [ dict( name = choice( male_names if is_male else female_names ), gender = 'male' if i
from random import choice, randint
male_names = [ 'Bob', 'John' ]
female_names = [ 'Alice', 'Cathrine' ]
mylist = [
dict(
name = choice( male_names if is_male else female_names ),
gender = 'male' if is_male else 'female'
)
for _ in range(10)
if (is_male := randint(1, 2))
]
正如您在这里的代码中所看到的,name
和gender
都取决于is\u male
变量。在本例中,是男性的
将是1或2,而不是真或假。问题是,由于if条件,如果is_-male
为False,它将继续进行下一次迭代,而不做任何事情。另一个问题是if条件使其可读性降低
有没有一种方法可以在不使用if条件的情况下在列表中添加变量?
大概是这样的:
from random import choice, randint
male_names = [ 'Bob', 'John' ]
female_names = [ 'Alice', 'Cathrine' ]
mylist = [
dict(
name = choice( male_names if is_male == 1 else female_names ),
gender = 'male' if is_male == 1 else 'female'
)
for _ in range(10)
is_male := choice([True, False])
]
生成一系列的
is_male
值,并进行转换:
生成一系列的
is_male
值,并进行转换:
如果你在理解中表达逻辑有困难,我建议你用循环代替。是的,最后我想我会的。我只是好奇是否可以在一个理解的环境下做这件事。谢谢。只需使用for循环。如果你写的代码像
(is_male:=randint(1,2))
只是为了把东西塞进列表理解,这是一个很好的迹象,你不应该使用列表理解如果你在理解中表达逻辑有困难,我建议你改为使用循环。是的,最后我想我会的。我只是好奇是否可以在一个理解的环境下做这件事。谢谢。只需使用for循环。如果你写的代码像(is_male:=randint(1,2))
只是为了把东西塞进列表理解,这是一个很好的迹象,你不应该使用列表理解
mylist = [
{
name: choice(male_names if is_male else female_names),
gender: 'male' if is_male else 'female'
}
for is_male in (choice([True, False]) for _ in range(10))
]