我有以下格式的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并稍后集成到一个,而且我似乎只是为最后一个值获取输出。
有没有更简单的方法来解决这个问题?
答案 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'}}
。