循环浏览字典中的列表并与列表中的列表进行比较



我对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 次之间的类似项目?

谢谢!

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

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

与其循环my_dict,不如循环my_list

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

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

这应该给出所需的结果。

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

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)

结果:

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

最新更新