我有一个列表列表,如下所示:
l1=[['a1','a2','a3'],['b1','b2'],['c1','a1']]
我想要一个字典列表,如下所示:
[{"start":"a1","end":"ä2"},
{"start":"a2","end":"a3"},
{"start":"a3","end":"a1"},
{"start":"b1","end":"b2"},
{"start":"c1","end":"a1"}
]
我尝试了以下代码,但索引超出范围异常:
for val in list_listedges:
for i in range(0,len(val)):
dict_edges["start"]=val[i]
dict_edges["end"]=val[i+1]
我正在寻找上述代码的工作解决方案或增强功能,它们将产生相同的结果。此外,3不是固定数字。也可能是4或5.在这种情况下,我需要所有元素与之配对彼此
你可以使用itertools.combinations()
函数生成每个子列表中所有可能的点对,从而完全避免编制索引,如下所示:
from itertools import combinations
l1 = [['a1','a2','a3'], ['b1','b2'], ['c1','a1']]
dicts = [{'start': start, 'end': end}
for points in l1
for start, end in combinations(points, 2)]
from pprint import pprint
pprint(dicts, sort_dicts=False)
输出:
[{'start': 'a1', 'end': 'a2'},
{'start': 'a1', 'end': 'a3'},
{'start': 'a2', 'end': 'a3'},
{'start': 'b1', 'end': 'b2'},
{'start': 'c1', 'end': 'a1'}]
如果列表中有5或4个元素,则不起作用。例如,如果列表中有[[a1,a2,a3,a4,a5]之类的列表。我得到的输出是[{a1,a2 },{a2,a3},{a3,a4},{a4,a5},{a5,a1}],但我还需要其他连接,例如[{a1,a3},{a1,a4},{a2, a5},{a2,a5},{a3,a5}]。这些值在@martineau中丢失。我需要将所有值配对
山姆:哦,好,现在我明白了你想要的-查看最新答案。