循环遍历字典中的列表并与列表中的列表进行比较

时间:2016-03-11 14:40:57

标签: python list dictionary

我对python很新,所以请耐心等待。

基本上我有两组数据。一个是由列表组成的字典,另一个是由列表组成的列表:

my_dict =  {1: [1], 2: [1, 2], 3: [1, 3], 4: [1, 3, 4], 5: [1, 3, 4, 5], 6: [1, 3, 4, 5, 6]}

my_list = ([1, 1, 0], [1, 2, 100], [1, 3, 150], [1, 4, 150], [1, 5, 10], [1, 6, 20])

我想比较列表中的前两个数字,以及字典中列表中的数字。当在列表中的列表中找到列表中的前两个数字(即(1,2))时,我将列表列表中的第三项附加到新列表(即(100))。

到目前为止,这是我的代码:

def AON(my_dict, my_list):
    new_list = []
    o_d = 0

for key in my_dict:

    if my_list[o_d][0] and my_list[o_d][1] in my_dict[key]:
        new_list.append(my_list[o_d][2])
        o_d += 1
    else:
        o_d += 1

print (o_d)
print(new_list)

return new_list
return o_d
AON(my_dict, my_list)

输出如下:

new_list = [0, 100, 150, 150, 10, 20]

我的问题是我的列表列表有600个列表,每个列表中包含三个项目。我的列表字典只有25个键。我的结果是new_list中只有25个项目 - 实际上应该有600个(在列表列表中找到像(1,3)这样的项目。如何让我的循环继续检查之间的类似项目my_dict和my_list 600次而不是25次?

谢谢!

3 个答案:

答案 0 :(得分:0)

您正在循环my_dict,并将每个键值的一个项目(最多)添加到new_list

相反,循环遍历my_list,并查找字典中每个元素的前两个元素,以查看是否应将相关值添加到new_list

答案 1 :(得分:0)

这应该会产生预期的结果。

首先在字典值中创建一组所有数字:

FILTERXML

现在,如果前两个在数字中,则取所有第三个条目:

numbers = set()
for v in my_dict.values():
    numbers.update(set(v))

结果:

res = [v3 for v1, v2, v3 in my_list if v1 in numbers and v2 in numbers]

print(res)

答案 2 :(得分:0)

而不是循环遍历my_dict,只需循环遍历my_list

您可以将循环压缩为单个列表理解:

[x3 for x1,x2,x3 in my_list if x1 in my_dict and x2 in my_dict]