Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环浏览字典中的列表并与列表中的列表进行比较_Python_List_Dictionary - Fatal编程技术网

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

Python 循环浏览字典中的列表并与列表中的列表进行比较,python,list,dictionary,Python,List,Dictionary,我对python还很陌生,所以请容忍我 基本上我有两组a数据。一个是由列表组成的词典,另一个是由列表组成的列表: 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]) 我想将列表中的前两个数字与

我对python还很陌生,所以请容忍我

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

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个键。我的结果是,新的列表中只有25个项目,而实际上应该有600个项目(如(1,3)这样的项目在整个列表中都可以找到)。我如何让我的循环在我的列表和我的列表之间检查类似的项目600次而不是25次


谢谢!

您正在循环查看
my_dict
,并在
新列表中添加(最多)每个键值一项


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

,这将给出所需的结果

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

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]

不要在
my_dict
上循环,只需在
my_list
上循环即可

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

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

这个方法不是给我[0,100,150,150,10,20]的结果,而是给我字典的键:{1,2,3,4,5,6}
numbers
不是结果。
res
是。