如何在Python中获得2个字典列表的联合

aaj*_*aaj 1 python arrays

我有2个列表,其中包含以下数据结构:

 array1:
 [{'student': {'name': 'abc'}, 'address': 'add_abc'}, 
  {'student': {'name': 'xyz'},  'address': 'add_xyz'}]

 array2:
 [{'student': {'name': 'abc'}, 'address': 'add_abc'}, 
  {'student': {'name': 'rst'},  'address': 'add_rst'}]
Run Code Online (Sandbox Code Playgroud)

我希望有一个array3上述2个列表的联合

 array3:
 [{'student': {'name': 'abc'}, 'address': 'add_abc'}, 
  {'student': {'name': 'rst'},  'address': 'add_rst'},
  {'student': {'name': 'xyz'},  'address': 'add_xyz'}]
Run Code Online (Sandbox Code Playgroud)

我怎么能用Python做到这一点?

Sel*_*cuk 5

它们lists不是数组,但这是一个解决方案:

a1 = [{'student': {'name': 'abc'}, 'address': 'add_abc'}, 
      {'student': {'name': 'xyz'},  'address': 'add_xyz'}]
a2 = [{'student': {'name': 'abc'}, 'address': 'add_abc'},  
      {'student': {'name': 'rst'},  'address': 'add_rst'}]
a3 = a1 + [i for i in a2 if i not in a1]
Run Code Online (Sandbox Code Playgroud)

价值a3将是

[{'student': {'name': 'abc'}, 'address': 'add_abc'}, 
 {'student': {'name': 'xyz'}, 'address': 'add_xyz'}, 
 {'student': {'name': 'rst'}, 'address': 'add_rst'}]
Run Code Online (Sandbox Code Playgroud)

如果您希望对结果列表进行排序(例如,按学生名称),只需使用sort方法:

a3.sort(key=lambda x: x["student"]["name"])
Run Code Online (Sandbox Code Playgroud)

结果a3将是:

[{'student': {'name': 'abc'}, 'address': 'add_abc'}, 
 {'student': {'name': 'rst'}, 'address': 'add_rst'},
 {'student': {'name': 'xyz'}, 'address': 'add_xyz'}] 
Run Code Online (Sandbox Code Playgroud)

通常你会简单地使用set(a1 + a2)但问题是你的dicts里面有lists并且它们是不可用的,因此它们不能被设置.