Python 如何将四个列表添加到一个词典中

Python 如何将四个列表添加到一个词典中,python,python-2.7,list,dictionary,for-loop,Python,Python 2.7,List,Dictionary,For Loop,在Python中,我有4个列表,一个列表希望其中一个成为我的字典键,其余的列表成为我的键值,但列表长度不同 Employee_ManagerDic = {} EmployeeID_List = [111,222,333,444,555] EmployeeFirstName_List = ['a','b','c','d','e'] managerID_List = [888,777,666] managerFirstName_List = ['f','g','h'] 我想要的输出格式如下: Em

在Python中,我有4个列表,一个列表希望其中一个成为我的字典键,其余的列表成为我的键值,但列表长度不同

Employee_ManagerDic = {}
EmployeeID_List = [111,222,333,444,555]
EmployeeFirstName_List = ['a','b','c','d','e']
managerID_List = [888,777,666]
managerFirstName_List = ['f','g','h']
我想要的输出格式如下:

Employee_ManagerDic = {EmployeeID_List:[EmployeeFirstName_List,managerID_List,
managerFirstName_List]}
诸如此类

Employee_managerDic = {
                       111:['a',888,'f'],
                       222:['b',777,'g'],
                       333:['c',666,'h'],
                       444:['d',null,null],
                       555:['e',null,null]}
我知道我可能需要为此使用for循环,但我不知道如何构造循环的逻辑


谢谢

因为您使用的是python2,所以可以使用
itertools.iziplongest
dict
构造函数:

from itertools import izip_longest
Employee_managerDic = dict(
    zip(
        EmployeeID_List,
        map(
            list,
            izip_longest(EmployeeFirstName_List, managerID_List, managerFirstName_List)
        )
    )
)
#{111: ['a', 888, 'f'],
# 222: ['b', 777, 'g'],
# 333: ['c', 666, 'h'],
# 444: ['d', None, None],
# 555: ['e', None, None]}
从:

制作一个迭代器,聚合来自每个ITerable的元素。 如果iterables的长度不均匀,则会填充缺少的值 具有填充值

列表(izip_longest(EmployeeFirstName_列表、managerID_列表、managerFirstName_列表))的中间输出是:

[('a', 888, 'f'),
 ('b', 777, 'g'),
 ('c', 666, 'h'),
 ('d', None, None),
 ('e', None, None)]
然后我调用了
map(list,…)
来将元组转换为列表,尽管这可能不是必需的(我这样做只是为了匹配您想要的输出)


最后,我们将
EmployeeID_列表传递给
dict
构造函数。

由于您使用的是python2,因此可以使用
itertools.iziployeeid
dict
构造函数:

from itertools import izip_longest
Employee_managerDic = dict(
    zip(
        EmployeeID_List,
        map(
            list,
            izip_longest(EmployeeFirstName_List, managerID_List, managerFirstName_List)
        )
    )
)
#{111: ['a', 888, 'f'],
# 222: ['b', 777, 'g'],
# 333: ['c', 666, 'h'],
# 444: ['d', None, None],
# 555: ['e', None, None]}
from itertools import izip_longest

Employee_ManagerDic = {
    row[0]: row[1:]
    for row in izip_longest(EmployeeID_List,
                            EmployeeFirstName_List,
                            managerID_List,
                            managerFirstName_List)
}
从:

制作一个迭代器,聚合来自每个ITerable的元素。 如果iterables的长度不均匀,则会填充缺少的值 具有填充值

列表(izip_longest(EmployeeFirstName_列表、managerID_列表、managerFirstName_列表))的中间输出是:

[('a', 888, 'f'),
 ('b', 777, 'g'),
 ('c', 666, 'h'),
 ('d', None, None),
 ('e', None, None)]
然后我调用了
map(list,…)
来将元组转换为列表,尽管这可能不是必需的(我这样做只是为了匹配您想要的输出)

最后,我们将
EmployeeID_列表
传递给
dict
构造函数

from itertools import izip_longest

Employee_ManagerDic = {
    row[0]: row[1:]
    for row in izip_longest(EmployeeID_List,
                            EmployeeFirstName_List,
                            managerID_List,
                            managerFirstName_List)
}
以上是相当于以下内容的词典理解:

Employee_ManagerDic = {}
for row in izip_longest(EmployeeID_List,
                        EmployeeFirstName_List,
                        managerID_List,
                        managerFirstName_List):
    Employee_ManagerDic[row[0]] = row[1:]
行[1:][/code>是一个切片,以防您不熟悉它并想用谷歌搜索它

以上是相当于以下内容的词典理解:

Employee_ManagerDic = {}
for row in izip_longest(EmployeeID_List,
                        EmployeeFirstName_List,
                        managerID_List,
                        managerFirstName_List):
    Employee_ManagerDic[row[0]] = row[1:]

行[1:][/code>是一个片段,以防您不熟悉它并想用谷歌搜索它。

对于Python2.7,您可以使用map with None代替zip,这将为您提供最长的zip

映射(无、员工ID列表、员工名字列表、经理ID列表、经理名字列表) [(111,'a',888,'f'),(222,'b',777,'g'),(333,'c',666,'h'),(444,'d',无,无,(555,'e',无,无)]

然后用听写理解转换成字典

result={tup[0]:映射中tup的tup[1:](无、EmployeeID\u列表、EmployeeFirstName\u列表、managerID\u列表、managerFirstName\u列表)}

结果:

>>结果
{555:('e',无,无),444:('d',无,无),333:('c',666',h'),222:('b',777',g'),111:('a',888',f')}


注意:结果是将字典转换为元组。如果您想要列表,只需将Python2.7的
tup[1:]
替换为
list(tup[1:])

,您可以使用map with None代替zip,这将为您提供最长的zip

映射(无、员工ID列表、员工名字列表、经理ID列表、经理名字列表) [(111,'a',888,'f'),(222,'b',777,'g'),(333,'c',666,'h'),(444,'d',无,无,(555,'e',无,无)]

然后用听写理解转换成字典

result={tup[0]:映射中tup的tup[1:](无、EmployeeID\u列表、EmployeeFirstName\u列表、managerID\u列表、managerFirstName\u列表)}

结果:

>>结果
{555:('e',无,无),444:('d',无,无),333:('c',666',h'),222:('b',777',g'),111:('a',888',f')}

注意:结果是将字典转换为元组。如果需要列表,只需将
tup[1:]
替换为
list(tup[1:])

以下是输出:

{111: ['a', 888, 'f'], 222: ['b', 777, 'g'], 333: ['c', 666, 'h'], 444: ['d', 'Null', 'Null'], 555: ['e', 'Null', 'Null']}
在这里,我创建了num和other_num等变量,以便在for循环期间,每次运行循环时,我们都可以将列表的索引增加+=1。我按照您的请求,在EmployeeID_列表中为该项的值设置字典键,然后将该值设置为等于EmployeeFirstName_列表。我从EmployeeFirstName_列表中递增要添加为值的索引,并使用“List”函数将其转换为我们创建的字典中的嵌套列表。之后,我注意到其他列表的索引较少,因此如果您运行的程序中用户可能缺少数据,我决定获取其他列表的长度,并将其与EmployeeID_列表的长度进行比较。如果它们的长度不同,我会在列表的末尾加上'Null'。我将Null附加到列表末尾的次数取决于缺少多少索引。最后,对于字典中的每个值,我们将另外两个列表的列表项附加到字典列表中。我根据它们的索引附加它们,每次通过列表增加索引。当我们打印结果时,我们会得到您需要的输出

以下是输出:

{111: ['a', 888, 'f'], 222: ['b', 777, 'g'], 333: ['c', 666, 'h'], 444: ['d', 'Null', 'Null'], 555: ['e', 'Null', 'Null']}
在这里,我创建了num和other_num等变量,以便在for循环期间,每次运行循环时,我们都可以将列表的索引增加+=1。我按照您的请求,在EmployeeID_列表中为该项的值设置字典键,然后将该值设置为等于EmployeeFirstName_列表。我从EmployeeFirstName_列表中递增要添加为值的索引,并使用“List”函数将其转换为我们创建的字典中的嵌套列表。之后,我注意到其他列表的索引较少,因此如果您运行的程序中用户可能缺少数据,我决定获取其他列表的长度,并将其与EmployeeID_列表的长度进行比较。如果它们的长度不同,我会在列表的末尾加上'Null'。我将Null附加到列表末尾的次数取决于缺少多少索引。最后,选举管理委员会