将列表映射为字典值

时间:2016-09-04 02:13:36

标签: python list dictionary list-comprehension

我有一个名为lst的字符串列表,其中包含三个人的姓名,城市和电子邮件地址。我有一个名为数据的字典,只包含密钥。

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
        }

我想将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"
        }]

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

2 个答案:

答案 0 :(得分: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)

<强>输出

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

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

答案 1 :(得分:4)

在这里。

Click

输出:

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

for i in xrange( 0, len(lst), 3 ):
    d = {}
    d['Name'] = lst[i]
    d['City'] = lst[i+1]
    d['Email'] = lst[i+2]

    newlst.append( d )

print newlst

使用理解:

[{'City': 'New York', 'Email': 'james@email.com', 'Name': 'James'},
 {'City': 'San Francisco', 'Email': 'matt@email.com', 'Name': 'Matt'},
 {'City': 'Los Angeles', 'Email': 'jessica@email.com', 'Name': 'Jessica'}]