来自Python中3个不同长度列表的嵌套字典

时间:2018-10-08 08:17:43

标签: python list dictionary

我想从长度不等的三个不同列表中创建一个嵌套词典。

这些是列表。

jaren = ['2017', '2018']
wedstrijden = ['NED', 'GER', 'GBR', 'USA']
eventresults = [[1, 2, 3, 4], [1,2], [1,2,3,4,5,6], [1,2,3,4,5,6,7,8,9,10], [3,2,1], [6,5,4,3,2,1], [4,5,6,3], [1,2,3,4,5,6,7]]

输出应为:

main_dict = {'2017': {'NED':[1, 2, 3, 4], 'GER':[1,2], 'GBR':[1,2,3,4,5,6], 'USA':[1,2,3,4,5,6,7,8,9,10]},{'2018': {'NED':[3, 2, 1], 'GER':[6,5,4,3,2,1], 'GBR':[4,5,6,3], 'USA':[1,2,3,4,5,6,7]}}

我当前的输出是:

main_dict = {'2017': {'NED':[1, 2, 3, 4], 'GER':[1, 2, 3, 4], 'GBR':[1, 2, 3, 4], 'USA':[1, 2, 3, 4]},{'2018': {'NED':[1,2], 'GER':[1,2], 'GBR':[1,2], 'USA':[1,2]}}

我使用以下代码:

main_dict = {}
for jaar, eventresult in zip(jaren, eventresults):
    main_dict[jaar] = {}
        for wedstrijd in wedstrijden:
            main_dict[jaar][wedstrijd] = eventresult

实际上我的list eventresults结果是DataFrames的列表,而不是带有整数的列表。

有人可以给我帮助吗?

1 个答案:

答案 0 :(得分:1)

可以通过在wedstrijden上用zipeventresults进行iterator来轻松解决:

event_itr = iter(eventresults)
result = {}
for year in jaren:
    result[year] = dict(zip(wedstrijden, event_itr))

# result:
# {'2017': {'NED': [1, 2, 3, 4], 'GER': [1, 2], 'GBR': [1, 2, 3, 4, 5, 6], 'USA': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]},
#  '2018': {'NED': [3, 2, 1], 'GER': [6, 5, 4, 3, 2, 1], 'GBR': [4, 5, 6, 3], 'USA': [1, 2, 3, 4, 5, 6, 7]}}