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