通过循环创建一个对象

3

我想创建一个随机用户列表,给定一个数量。目前我能获取到一个随机邮件列表。我正在尝试创建一个名为“users”的对象,其中包含 n 个具有随机信息的用户。

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
3个回答

3

尝试:

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

说明:

  1. 你需要保存在for循环中创建的所有用户。目前,你只返回了最后一个创建的用户。一种解决方案是将users定义为列表,并在循环内部append新用户。

  2. 在电子邮件定义中,你不需要使用for循环,因为你只需要为给定的用户设置一个电子邮件。你可以直接设置:

'email': get_random_name(letters, length) + '@' + get_random_domain(domains)

完整代码

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'}]

1
你正在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

您还为单个用户生成三个随机名称。我不知道这是否是您的意图,但也许您想要生成一个随机名称,并在电子邮件用户名显示名称中使用它。

0

你无法完全获取这个结构:

{{'email':'kgfadjb@gmail.com', 'username':'kgfadjb','DisplayName':'kgfadjb'},
    {'email':'lifjekb@gmail.com', 'username':'lifjekb','DisplayName':'lifjekb'},
    {'email':'cckcbdh@gmail.com', 'username':'cckcbdh','DisplayName':'cckcbdh'}}

因为它是一组字典。如果字典是可哈希的,那么它将是可哈希的。只有可哈希的对象才能成为集合的元素。但是,您可以拥有一个字典列表

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接