Python从字典列表中提取键值的子集

时间:2020-09-02 13:58:09

标签: python-3.x

我需要帮助来从原始词典列表中提取键的子集和值。 我能够获取键值对,但无法将其保存到新字典中,当我打印新字典时,我只能获得的是最后一个键值对,但不是所有子集键值对

    list1=[{'t1':43, 't2':45, 't3':56, 't4':59, 't5':45, 't6':31}, {'t1':3, 't2':5, 't3':5, 't4':9}, {'t1':47, 't2':59, 't3':86, 't4':5}]
    myks=['t1','t3']
    newlist={}
    for i in range(len(list1)):
        for j in list1[i].keys():
            if j in myks:
                print (j,list1[i][j])
                newlist={j: list1[i][j]}
                
    print(newlist)

我得到的输出:

t1 43
t3 56
t1 3
t3 5
t1 47
t3 86
{'t3': 86}

预期:{'t1':43, t3:56, 't1':3, 't3':5, 't3':86} 请让我知道我在哪里做错了,并帮助修复它。

谢谢

1 个答案:

答案 0 :(得分:0)

不幸的是,由于所有字典键必须唯一,因此无法实现预期的输出。您可以将所有匹配的值添加到嵌套列表中,以使其可访问:

list1=[{'t1':43, 't2':45, 't3':56, 't4':59, 't5':45, 't6':31}, {'t1':3, 't2':5, 't3':5, 't4':9}, {'t1':47, 't2':59, 't3':86, 't4':5}]
myks=['t1','t3']
newlist={}
for i in range(len(list1)):
    for j in list1[i].keys():
        if j in myks:
            if j not in newlist:
                newlist[j] = [list1[i][j]]
            else:
                newlist[j].append(list1[i][j])

print(newlist)

>>> {'t1': [43, 3, 47], 't3': [56, 5, 86]}

然后您可以通过列表索引引用这些内容:

print(newlist['t1'][0])
>>> 43
相关问题