给出<section class="soon">
<h2>LLORUM ISPUS DOR!</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptate dolorem reprehenderit illo officia<br> ex quidem aut veniam modi numquam iusto, ipsam placeat dolorum quae eum vero! Eveniet esse<br>Lorem ipsum dolor sit amet, consectetur adipisicing
elit. Voluptate dolorem reprehenderit illo officia<br> enim molestiae delectus modi officiis ab porro, maiores, dolores consequuntur ipsum expedita!Lorem <br> ipsum dolor sit amet, consectetur adipisicing elit. Voluptate dolorem reprehenderit illo
officia
<br> ex quidem aut veniam modi numquam iusto, ipsam placeat dolorum quae eum vero! Eveniet esse<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptate dolorem reprehenderit illo officia<br> enim molestiae delectus modi officiis ab
porro, maiores, dolores consequuntur ipsum expedita!</p>
</section>
<div class="leafPic">
<img src="https://via.placeholder.com/350" alt="Blooming flower">
</div>
个以n
个字典为元素的列表,我想生成一个新列表,其中包含一组联接(左联接)的字典。每个字典都保证有一个名为m
的键,但除此之外可以有任意键集。例如,想象以下两个列表:
index
我想生成一个联合列表:
l1 = [{"index":1, "b":2},
{"index":2, "b":3},
{"index":3, "b":"10"},
{"index":4, "c":"7"}]
l2 = [{"index":1, "c":4},
{"index":2, "c":5},
{"index":6, "c":8},
{"index":7, "c":9}]
在Python中最有效的方法是什么?
当前我有这段代码,但是它只做一个内部联接,如何修改它以给我左联接?
l3 = [{"index":1, "b":2, "c":4},
{"index":2, "b":3, "c":5},
{"index":3, "b":10},
{"index":4, "c":7}]
答案 0 :(得分:0)
为了提高效率,您可以先构建一个以索引为键的字典,并以l2
的对应字典为值,这样您就不必每次都经过l2
在其中寻找匹配的字典。
然后,您可以构建新的词典列表:对于l1
中的每个词典,我们都会对其进行复制以保留原始副本,并使用l2
中匹配的词典对其进行更新
l1 = [{"index":1, "b":2}, {"index":2, "b":3}, {"index":3, "b":"10"}, {"index":4, "c":"7"}]
l2 = [{"index":1, "c":4}, {"index":2, "c":5}, {"index":6, "c":8}, {"index":7, "c":9}]
dict2 = {dct['index']:dct for dct in l2}
out = []
for d1 in l1:
d = dict(**d1)
d.update(dict2.get(d1['index'], {}))
out.append(d)
print(out)
# [{'index': 1, 'b': 2, 'c': 4}, {'index': 2, 'b': 3, 'c': 5}, {'index': 3, 'b': '10'}, {'index': 4, 'c': '7'}]
答案 1 :(得分:0)
下面的代码片段只是将它们转换为字典以实现更快的合并,然后将合并的字典重新转换为列表以匹配您的预期输出。
l1_dict = {item['index']: item for item in l1}
l2_dict = {item['index']: item for item in l2}
for item in l1_dict:
l1_dict[item].update(l2_dict.get(item, {}))
l3 = list(l1_dict.values())
print(l3)