从多个列表和变量构建复杂的Python字典

1 投票
1 回答
1300 浏览
提问于 2025-04-17 13:24

我刚开始学习Python和编程。看了很多关于字典、列表、map、lambda、列表推导式等问题,但我还是没法把一个具体的功能组合起来,来创建我想要的字典。

我可以这样描述我想要的字典:

    #goal: make a dictionary that describes a form

    FORMNAME = 'aspnetForm'
    nicks = ['username','password','submit'] #nicknames I want to use
    names = [FIELD_USERNAME, FIELD_PWD, BUTTON_LOGIN] #field names
    values =  ['myusername','mypass',''] #field values
    types =  ['text', 'password', 'submit'] #control types

    INPUTS = [{nicks[0]:{'name':names[0],'value':values[0],'type':types[0]}},
    {nicks[1]:{'name':names[1],'value':values[1],'type':types[1]}},
    {nicks[2]:{'name':names[2],'value':values[2],'type':types[2]}}]

    LOGINFORM = {'name':FORMNAME, 'input':INPUTS} #this is the final dictionary I want to build

请用最简单、最优雅的方法来教我如何构建LOGINFORM,这样我就能学习了!

我想用这个字典来填充一个mechanize中的表单。这是我唯一需要填充的表单。我可以用“传统”的方法来填充这个表单,但我想学习如何用字典以更系统的方式来填充它。

我在这里的主要目的是学习如何填充字典。不过,在我学会如何回答自己的问题之前,感谢你们不要建议更好的方法。

1 个回答

5

你可以使用zip这个功能:

LOGINFORM = {'name': FORMNAME, 'input':
     [{nick: {'name': name, 'value': value, 'type': sort}}
       for nick, name, value, sort in zip(nicks, names, values, types)]}

我在这里避免使用type作为变量名,因为它是一个内置的函数/类型,不过其实在这里你用它也是没问题的。

撰写回答