Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过循环创建对象_Python - Fatal编程技术网

Python 通过循环创建对象

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

我想创建一个随机用户列表,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

您正在为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()