Python 通过循环创建对象
我想创建一个随机用户列表,wes是一个给定的数字 目前,我可以得到一个随机电子邮件列表。 我正在尝试创建一个对象用户,该对象将包含n个给定的用户和随机信息Python 通过循环创建对象,python,Python,我想创建一个随机用户列表,wes是一个给定的数字 目前,我可以得到一个随机电子邮件列表。 我正在尝试创建一个对象用户,该对象将包含n个给定的用户和随机信息 import random import string domains = ["gmail.com"] letters = string.ascii_lowercase[:12] def get_random_domain(domains): return random.choice(domains) def get_rand
import random
import string
domains = ["gmail.com"]
letters = string.ascii_lowercase[:12]
def get_random_domain(domains):
return random.choice(domains)
def get_random_name(letters, length):
return ''.join(random.choice(letters) for i in range(length))
def generate_random_emails(nb, length):
users = {}
for j in range(nb):
users = {
'email':[get_random_name(letters, length) + '@' + get_random_domain(domains) for i in range(nb)],
'username': get_random_name(letters, length),
'Display_Name': get_random_name(letters, length)
}
return users
def main():
print(generate_random_emails(4, 7))
if __name__ == "__main__":
main()
它又回来了
{'email': ['kgfadjb@gmail.com', 'lifjekb@gmail.com', 'cckcbdh@gmail.com'], 'username': 'icliilf', 'DisplayName': 'efbdida'}
我想要达到的是得到这样的东西
{{'email':'kgfadjb@gmail.com', 'username':'kgfadjb','DisplayName':'kgfadjb'},
{'email':'lifjekb@gmail.com', 'username':'lifjekb','DisplayName':'lifjekb'},
{'email':'cckcbdh@gmail.com', 'username':'cckcbdh','DisplayName':'cckcbdh'}}
我知道我的内环有问题
generate_random_emails
您正在为for循环中的同一变量
users
分配新值,而不是将其附加到列表中,然后返回列表
考虑这一点:
def generate_random_emails(nb, length):
users = []
for j in range(nb):
user = {
'email': get_random_name(letters, length) + '@' + get_random_domain(domains),
'username': get_random_name(letters, length),
'Display_Name': get_random_name(letters, length)
}
users.append(user)
return users
您还将为单个用户生成三个随机名称。我不知道这是否是你的意图,但也许你想生成一个随机名称,并在电子邮件中使用它,用户名和显示名称都一样。试试看:
def generate_random_emails(nb, length):
users = []
for j in range(nb):
users.append({
'email': get_random_name(letters, length) + '@' + get_random_domain(domains),
'username': get_random_name(letters, length),
'Display_Name': get_random_name(letters, length)
})
return users
解释:
def generate_random_emails(nb, length):
users = []
for j in range(nb):
users.append({
'email': get_random_name(letters, length) + '@' + get_random_domain(domains),
'username': get_random_name(letters, length),
'Display_Name': get_random_name(letters, length)
})
return users
您需要保存在for循环中创建的用户。目前,您只返回上次创建的用户。一种解决方案是将用户
定义为一个列表,并在循环中添加新用户
在电子邮件定义中,对于
循环,您不需要,因为对于给定用户,您只需要一封电子邮件。您可以直接设置:
完整代码
def generate_random_emails(nb, length):
# Users output
users = []
# For desired number of users
for j in range(nb):
# Add one user with :
# - 1 email
# - 1 username
# - 1 display_name
users.append({
'email': get_random_name(letters, length) + '@' + get_random_domain(domains),
'username': get_random_name(letters, length),
'Display_Name': get_random_name(letters, length)
})
return users
print(generate_random_emails(4, 7))
# [{'email': 'icljiba@gmail.com', 'username': 'fjfgcfe', 'Display_Name': 'dliddfa'},
# {'email': 'ekfjjei@gmail.com', 'username': 'bkjgdfe', 'Display_Name':'ceddfce'},
# {'email': 'ceackac@gmail.com', 'username': 'jdekjcd', 'Display_Name': 'ijeffgi'},
# {'email': 'gejkcck@gmail.com', 'username': 'adgieki', 'Display_Name': 'idacgci'}]
您无法准确获得此结构:
{{'email':'kgfadjb@gmail.com', 'username':'kgfadjb','DisplayName':'kgfadjb'},
{'email':'lifjekb@gmail.com', 'username':'lifjekb','DisplayName':'lifjekb'},
{'email':'cckcbdh@gmail.com', 'username':'cckcbdh','DisplayName':'cckcbdh'}}
因为这是一套格言。或者,如果dicts是可散列的。只有可散列的对象才能是集合的元素。但是,您可以有一个目录列表:
import random
import string
domains = ["gmail.com"]
letters = string.ascii_lowercase[:12] # why only a-k? but that's your choice
def get_random_domain(domains):
return random.choice(domains)
def get_random_name(letters, length):
return ''.join(random.sample(letters, length))
def get_random_email(letters, length):
return get_random_name(letters, length) + '@' + get_random_domain(domains)
def generate_random_users(nb, length):
users = [
{'email': get_random_email(letters, length)
'username': get_random_name(letters, length),
'Display_Name': get_random_name(letters, length)
} for j in range(nb)
]
return users
def main():
print(generate_random_users(4, 7))
if __name__ == "__main__":
main()