将列表映射为字典值

Jam*_* C. -1 python dictionary list-comprehension list

我有一个字符串名为LST列表包含名称,城市,地址和电子邮件地址三人的命令.我有一个名为data的字典,只包含密钥.

lst = ['James','New York','james@email.com','Matt','San Francisco','matt@email.com','Jessica','Los Angeles','jessica@email.com']

data = {
            "Name": None,
            "City": None,
            "email": None
        }
Run Code Online (Sandbox Code Playgroud)

我想将lst项目映射为数据中的值,并生成一个新的字典列表,如下所示,

newlst = [{
            "Name": "James",
            "City": "New York",
            "email": "james@email.com"
        },
        {
            "Name": "Matt",
            "City": "San Francisco",
            "email": "matt@email.com"
        },
        {
            "Name": "Jessica",
            "City": "Los Angeles",
            "email": "jessica@email.com"
        }]
Run Code Online (Sandbox Code Playgroud)

我知道如何将单个值添加到字典中的特定键,如data ["Name"] ="James"但是如何通过使用list/dict理解或迭代来实现这一点?

Kar*_*rin 5

这是使用列表理解的方法.我们的想法是,我们根据键的拉链和一个时间的三个值创建一个字典.

lst = [
    'James', 'New York', 'james@email.com',
    'Matt', 'San Francisco', 'matt@email.com',
    'Jessica', 'Los Angeles', 'jessica@email.com',
]

keys = [
    'Name',
    'City',
    'email',
]

newlst = [
    dict(zip(keys, values)) for values in [iter(lst)] * len(keys)
]
print(newlst)
Run Code Online (Sandbox Code Playgroud)

输出:

[
    {'City': 'New York', 'Name': 'James', 'email': 'james@email.com'},
    {'City': 'San Francisco', 'Name': 'Matt', 'email': 'matt@email.com'},
    {'City': 'Los Angeles', 'Name': 'Jessica', 'email': 'jessica@email.com'}
]
Run Code Online (Sandbox Code Playgroud)

[iter(lst)] * len(keys)将从列表中一次返回3个值的块.zip(keys, values)然后将生成包含键和相应值的元组迭代器.最后,dict()将其转换为要插入的字典newlst.这将循环直到列表用尽.