从列表中创建词典

问题描述 投票:0回答:2

我有一个包含4x子列表的"testlist"列表

[
[name1,ip1,mask1,group1],
[name2,ip2,mask2,group1],
[name3,ip3,mask3,group2],
[name4,ip4,mask4,group2]
]

我想从“testlist”中获取以下字典

{group1:[name1,name2], group2:[name3,name4]}

我这里有一小段代码,它从每个子列表中取出“group”元素,然后用带元素作为键来更新字典。我坚持的是如何填写这些键的值?

def test():
dic={}
testlist = [
            [name1,ip1,mask1,group1],
            [name2,ip2,mask2,group1], 
            [name3,ip3,mask3,group2],
            [name4,ip4,mask4,group2]
           ]
for each in testlist:
    dic.update{each[3]:[]}
python
2个回答
0
投票

考虑到testlist的每个子列表中的项都是字符串,试试这个:

dic = {i : [j[0] for j in testlist if i==j[3]] for i in set([k[3] for k in testlist])}

以下是相同的代码:

unique_fourth_items = []
for i in testlist:
    unique_fourth_items.append(i[3])
unique_fourth_items = set(unique_fourth_items)
dic = {}
# Check in testlist for each item of unique_fourth_items list
for i in unique_fourth_items:
    temp = []
    for j in testlist:
        if j[3] == i:
            temp.append(j[0])
    dic[i] = temp

0
投票

在列表上使用“传统”循环(假设name1,ip1等在某处定义):

def test():
    dic = {}
    testlist = [
        [name1, ip1, mask1, group1],
        [name2, ip2, mask2, group1],
        [name3, ip3, mask3, group2],
        [name4, ip4, mask4, group2]
    ]
    for each in testlist:
        if each[3] not in dic:
            dic[each[3]] = []

        dic[each[3]].append(each[0])

    return dic
© www.soinside.com 2019 - 2024. All rights reserved.