我的列表列表是
candidates= [[714, 1023, 768, 1078], [803, 938, 868, 995]]
我的字典是:
main_dict = {(1561, 48, 1623, 105): [[[1592, 58]],
[[1591, 59]],
[[1585, 59]],
[[1600, 58]]],
(714, 1023, 768, 1078): [[[1, 5]],
[[2, 6]],
[[3, 3]],
[[4, 3]]],
(803, 938, 868, 995): [[[14, 5]],
[[22, 64]],
[[34, 31]],
[[43, 32]]]
}
我想有2个列表,candidate_values_exists_in_dict_key
包含values
中存在的candidates
的相应main_dict
,另一个列表包含{{1} }位于values
中,但不在main_dict
中。
这是我尝试过的,非常混乱且缓慢。有人可以有更快的方法吗?此外,我怎么能有一个else语句,它包含键candidate_values_exists_in_dict_key
的列表,它们不在v
中但是在candidate_values_exists_in_dict_key
中?
保证main_dict
的值始终位于candidates
键中,并且外观与main_dict
相同。
candidates
答案 0 :(得分:1)
只需使用dict查找进行普通列表理解就可以了。不需要嵌套循环
candidate_values_exists_in_dict_key = [main_dict[tuple(c)] for c in candidates]
values_of_main_dict_not_in_candidates_values_list = [v for k,v in main_dict.items() if list(k) not in candidates]
答案 1 :(得分:0)
鉴于您除了要输出候选列表中的 not 值列表外,还必须以一种形式遍历字典或在任何情况下都可以。
因此,问题中的代码基本上没问题。但是您可以通过使用一组候选对象(转换为用作字典键的元组)来测试包含性,而不是使用嵌套循环来稍微改善它。因为您知道它们被用作字典键,所以您也知道它们可以用作集合的元素。
candidate_tuples = set(map(tuple, candidates))
candidate_values_exists_in_dict_key = []
values_of_main_dict_not_in_candidates_values_list = []
for k, v in main_dict.items():
if k in candidate_tuples:
candidate_values_exists_in_dict_key.append(v)
else:
values_of_main_dict_not_in_candidates_values_list.append(v)