通过迭代列表列表来创建混合python数据结构

时间:2015-03-02 19:43:10

标签: python list for-loop dictionary

我需要将数据提供给API,该API可以从系统创建或删除用户。有效负载的语法如下:

b.User.create([{'user': {'name': 'kylie','full_name': 'kylie'}, 
                'password': {'is_encrypted': True, 'password': 'letmein'}, 
                'perms': [{'partition': '/Common', 'role': 'USER_ROLE_GUEST'}], 
                'login_shell': '/sbin/nologin'}])

b.User.delete(['ron'])

很明显,创建用户有效负载是一个字典列表,而字典又由字典组成。删除有效负载只是一个简单的名称列表。

我的示例输入数据是一个列表列表,如下所示:

[['NEW','kylie','OPERATOR','/sbin/nologin'],['DELETE', 'ron', 'ADMINISTRATOR', '/sbin/bash'],['NEW','jessie','GUEST','sbin/nologin']]

需要注意的一些要点:

  1. NEW表示要创建的用户,DELETE表示要删除的用户

  2. 密码已加密布尔值,密码和分区值始终是固定的,无需从输入中获取,与示例中的相同。

  3. 迭代输入数据以创建此有效负载的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

只需迭代输入数据,就像这样

data = [['NEW', 'kylie', 'OPERATOR', '/sbin/nologin'],
        ['DELETE', 'ron', 'ADMINISTRATOR', '/sbin/bash'],
        ['NEW', 'jessie', 'GUEST', 'sbin/nologin']]

for record in data:
    if record[0] == 'NEW':
        b.USER.create([get_user_object(*record[1:])])
    else:
        b.USER.delete([record[1]])

你可以实现get_user_object,就像这样

def get_user_object(name, role, shell):
    return {
        'user': {
            'name': name,
            'full_name': name
        },
        'password': {
            'is_encrypted': True,
            'password': 'letmein'
        },
        'perms': [{
            'partition': '/Common',
            'role': role
        }],
        'login_shell': shell
    }