Python 如何将一个列表中的嵌套dict值附加到另一个列表中?
假设我有这样的东西:Python 如何将一个列表中的嵌套dict值附加到另一个列表中?,python,json,list,dictionary,Python,Json,List,Dictionary,假设我有这样的东西: list1 = [{"l1_key_1": "l1_value_1", "l1_key_2": "l1_value_2", "l1_key_3": "l1_value_3"}, {...}] list2 = [{"l2_key_1": "l2_value_1", "l2_key_2": "
list1 = [{"l1_key_1": "l1_value_1", "l1_key_2": "l1_value_2", "l1_key_3": "l1_value_3"}, {...}]
list2 = [{"l2_key_1": "l2_value_1", "l2_key_2": "l2_value_2", "l2_key_3": "l2_value_3"}, {...}]
我正在尝试获得类似以下内容的输出:
list2 = [{"l2_key_1": ["l1_value_1", "l2_value_1"], "l2_key_2": "l2_value_2", "l2_key_3": "l2_value_3"}, {...}]
我尝试过使用zip()
和defaultdict
方法来帮助解决这个问题,但运气不太好
我主要想知道如何将第一个元素的第一个键和第二个键的值组合到一个列表中,对第二个元素执行相同的操作,依此类推。从
列表2
复制词典。然后从两个字典中获取第一个键和值,将这些值组合到一个列表中,并用该列表替换第一个字典元素
对每一对词典都使用列表理解
def combine_dicts(d1, d2):
first_value1 = list(d1.values())[0]
first_key, first_value2 = list(d2.entries())[0]
new_dict = d2.copy()
new_dict[first_key] = [first_value1, first_value2]
return new_dict
result = [combine_dicts(d1, d2) for (d1, d2) in zip(list1, list2)]
这假设两个列表的长度相同。如果没有,其中一个列表中的额外元素将被丢弃。查看您的输出,我看到输出中的一些项目是列表,一些是字符串。我认为这是一种反模式。我认为最好将所有项目都列为列表(即使列表中只有一个或零个项目) 下面是我认为您要求的代码:
from collections import defaultdict
new_list = []
for d1, d2 in zip(list1, list2):
new_dict = defaultdict(list)
for k, v in d1.items():
new_dict[k].append(v)
for k, v in d2.items():
new_dict[k].append(v)
new_list.append(new_dict)
需要注意的一点是,如果列表1和列表2的大小不同,
zip
将只使用长度不超过较短列表的元素。如果您坚持在输出中同时使用列表和字符串类型,代码将稍微复杂一些,但我看不出这样做有什么好处。我看不出您如何组合这些内容的逻辑。为什么结果中的l2_值_2
在l2_键_1
的值中?虽然Python最新版本中的词典保留插入顺序,但您不应该依赖它。逻辑应该基于键和值,而不是顺序。为什么您的结果没有列表作为第二个键和第三个键的值?是的,这里没有模式,这使得它很困难。我只是尝试组合每个列表元素中第一个键的第一个值。结果中的第一个l2\u值\u 2
是否为l2\u值\u 1
?注意:如果列表1和列表2中的dict
包含不同的项,则上述代码有效。