从2个列表列表

时间:2018-01-20 18:03:27

标签: python-3.x dictionary

我有以下格式的2个列表。

fa_n=[['DSS', 'DCCS2K01', 'C9790D0E', '5000', 'SPA9'], ['DSS', 'DCCS2K01', 'C9790D0E', '5000', 'SPB13']]
serv_n=[['10:00:56:00:74:79:0d:0e', '50:02:01:34:36:e4:20:gh'], ['10:00:45:00:74:79:0d:0e', '50:02:01:34:36:e4:20:gh']]

我需要以下字典输出,其中fa_n子列表的第3个元素将始终是键,这里是'5000' 而这又应该有一个fa_n的第4个元素的键值对和serv_n的第1个元素。

预期输出     {key:{key:value},依此类推}

{'5000':{'SPA9':'50:02:01:34:36:e4:20:gh'},
{'SPB13','50:02:01:34:36:e4:20:gh'}}

我的代码

b_dir=[]
dir_wwn=[]
for arr, fa  in zip(fa_n,serv_n):   
    b_dir.append(f"{arr[3]} ;{arr[4]}")
    dir_wwn.append(f"{arr[4]} ;{fa[1]}")       

print (dict(i.split(';') for i in b_dir)) 
>> {'5000 ': 'SPB13'}

所以我想我会创建2个单独的dicts并稍后集成到一个,而且我似乎只是为最后一个值获取输出。

有没有更简单的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

你遇到的麻烦是dict()(以及字典理解)在它遇到重复键时会遇到它遇到的最后一个键值对,例如:

dict([(1,2), (1,3)]) == {1: 3}

相反,如果字典已经存在,则需要添加到字典中:

result = {}

for arr, fa in zip(fa_n, serv_n):   
    key = arr[3]

    if key in result:
        result[key][arr[4]] = fa[1]
    else:
        result[key] = {arr[4]: fa[1]}

print result

根据需要为您提供{'5000': {'SPB13': '50:02:01:34:36:e4:20:gh', 'SPA9': '50:02:01:34:36:e4:20:gh'}}