合并两个行列表
Combining two lists of rows
我有两个行列表,每个列表有两行,如下所示:
list1 = [{'a': 'foo', 'b': 'bar', 'c': 'baz'}, {'d': 'qux', 'e': 'quux', 'f': 'quuz'}]
list2 = [{'g': 'corge', 'h': 'grault', 'i': 'garply'}, {'j': 'waldo', 'k': 'fred', 'l': 'plugh'}]
我想连接两个列表,以便列表 1 的第 1 行与列表 2 的第 1 行连接,列表 1 的第 2 行与列表 2 的第 2 行连接,如下所示:
final_list = [{'a': foo, 'b': bar 'c': baz, 'g': corge, 'h': grault, 'i': garply}, {'d': qux, 'e': quux, 'f': quuz, 'j': waldo, 'k': fred, 'l': plugh}]
我试过:
final_list = [[i, j] for i,j in zip(list1, list2)]
但它并没有完全正确地连接它们。相反,它会产生:
[{'a': foo, 'b': bar 'c': baz}, {'g': corge, 'h': grault, 'i': garply}], [{'d': qux, 'e': quux, 'f': quuz}, {'j': waldo, 'k': fred, 'l': plugh}]
我想加入这些行列表,这样我就可以在 HTML 页面上使用 Jinja 循环遍历它们。我该如何解决这个问题?
您的条目是字典对象…
你可以从这两个字典中创建一个新的...如果有相同的值,最后一个字典的键将覆盖值。下面是使用 dict
解包运算符 **
.
final_lst = [{**d1, **d2} for d1, d2 in zip(lst1, lst2)]
还有其他方法。删除了第一个示例,因为它不正确。
您的列表理解应该是为 zip()
:
结果中的每个元素创建一个新字典,而不是一个字典列表
list1 = [
{'a': 'foo', 'b': 'bar', 'c': 'baz'},
{'d': 'qux', 'e': 'quux', 'f': 'quuz'}
]
list2 = [
{'g': 'corge', 'h': 'grault', 'i': 'garply'},
{'j': 'waldo', 'k': 'fred', 'l': 'plugh'}
]
# Can also use "x | y" in place of "{**x, **y}" if on Python 3.9+
result = [{**x, **y} for x, y in zip(list1, list2)]
print(result)
这输出:
[
{'a': 'foo', 'b': 'bar', 'c': 'baz', 'g': 'corge', 'h': 'grault', 'i': 'garply'},
{'d': 'qux', 'e': 'quux', 'f': 'quuz', 'j': 'waldo', 'k': 'fred', 'l': 'plugh'}
]
你其实可以用update
这个功能来合并两个python字典,非常简单易用。
a = [
{"a": "foo", "b": "bar", "c": "baz"},
{"d": "qux", "e": "quux", "f": "quuz"},
]
b = [
{"g": "corge", "h": "grault", "i": "garply"},
{"j": "waldo", "k": "fred", "l": "plugh"},
]
for i in range(len(a)):
a[i].update(b[i])
print(a)
输出为
[{'a': 'foo', 'b': 'bar', 'c': 'baz', 'g': 'corge', 'h': 'grault', 'i': 'garply'}, {'d': 'qux', 'e': 'quux', 'f': 'quuz', 'j': 'waldo', 'k': 'fred', 'l': 'plugh'}]
我有两个行列表,每个列表有两行,如下所示:
list1 = [{'a': 'foo', 'b': 'bar', 'c': 'baz'}, {'d': 'qux', 'e': 'quux', 'f': 'quuz'}]
list2 = [{'g': 'corge', 'h': 'grault', 'i': 'garply'}, {'j': 'waldo', 'k': 'fred', 'l': 'plugh'}]
我想连接两个列表,以便列表 1 的第 1 行与列表 2 的第 1 行连接,列表 1 的第 2 行与列表 2 的第 2 行连接,如下所示:
final_list = [{'a': foo, 'b': bar 'c': baz, 'g': corge, 'h': grault, 'i': garply}, {'d': qux, 'e': quux, 'f': quuz, 'j': waldo, 'k': fred, 'l': plugh}]
我试过:
final_list = [[i, j] for i,j in zip(list1, list2)]
但它并没有完全正确地连接它们。相反,它会产生:
[{'a': foo, 'b': bar 'c': baz}, {'g': corge, 'h': grault, 'i': garply}], [{'d': qux, 'e': quux, 'f': quuz}, {'j': waldo, 'k': fred, 'l': plugh}]
我想加入这些行列表,这样我就可以在 HTML 页面上使用 Jinja 循环遍历它们。我该如何解决这个问题?
您的条目是字典对象…
你可以从这两个字典中创建一个新的...如果有相同的值,最后一个字典的键将覆盖值。下面是使用 dict
解包运算符 **
.
final_lst = [{**d1, **d2} for d1, d2 in zip(lst1, lst2)]
还有其他方法。删除了第一个示例,因为它不正确。
您的列表理解应该是为 zip()
:
list1 = [
{'a': 'foo', 'b': 'bar', 'c': 'baz'},
{'d': 'qux', 'e': 'quux', 'f': 'quuz'}
]
list2 = [
{'g': 'corge', 'h': 'grault', 'i': 'garply'},
{'j': 'waldo', 'k': 'fred', 'l': 'plugh'}
]
# Can also use "x | y" in place of "{**x, **y}" if on Python 3.9+
result = [{**x, **y} for x, y in zip(list1, list2)]
print(result)
这输出:
[
{'a': 'foo', 'b': 'bar', 'c': 'baz', 'g': 'corge', 'h': 'grault', 'i': 'garply'},
{'d': 'qux', 'e': 'quux', 'f': 'quuz', 'j': 'waldo', 'k': 'fred', 'l': 'plugh'}
]
你其实可以用update
这个功能来合并两个python字典,非常简单易用。
a = [
{"a": "foo", "b": "bar", "c": "baz"},
{"d": "qux", "e": "quux", "f": "quuz"},
]
b = [
{"g": "corge", "h": "grault", "i": "garply"},
{"j": "waldo", "k": "fred", "l": "plugh"},
]
for i in range(len(a)):
a[i].update(b[i])
print(a)
输出为
[{'a': 'foo', 'b': 'bar', 'c': 'baz', 'g': 'corge', 'h': 'grault', 'i': 'garply'}, {'d': 'qux', 'e': 'quux', 'f': 'quuz', 'j': 'waldo', 'k': 'fred', 'l': 'plugh'}]