我对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次?
谢谢!
答案 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]