通过循环创建对象

2024-05-14 22:25:36 发布

您现在位置: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_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

Tags: namecomgetemaildefusernamerandomlength
3条回答

您无法准确获得此结构:

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

试试看

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

将新值赋给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

您还将为单个用户生成三个随机名称。我不知道这是否是您的意图,但可能您希望生成一个随机名称并在emailusernameDisplay_Name中使用它

相关问题 更多 >

    热门问题