我有两个字典,我想将两个字典合并为一个。
如何有效地合并它们?
Dict1
{
UUID('id1'): {
'due': datetime.date(2018, 3, 10),
'status': 'Done',
}, UUID('id2'): {
'due_date': datetime.date(2018, 3, 10),
'old_status': 'Done',
}
}
Dict2
{
UUID('id1'): {
'new_val': 'Pass',
'amount': 123.0,
}, UUID('id2'): {
'new_val': 'Fail',
'amount': 0,
}
}
所需输出
{
UUID('id1'): {
'due': datetime.date(2018, 3, 10),
'status': 'Done',
'new_val': 'Pass',
'amount': 123.0,
}, UUID('id2'): {
'due_date': datetime.date(2018, 3, 10),
'old_status': 'Done',
'new_val': 'Fail',
'amount': 0,
}
}
答案 0 :(得分:1)
您可以使用**
解压缩符号和dict.get
默认参数{}
来组合您的词典。
这将处理一个字典中的键不在另一个字典中的情况,并允许我们迭代所有键的并集。
keys = d1.keys() | d2.keys()
res = {k: {**d1.get(k, {}), **d2.get(k, {})} for k in keys}
<强>结果强>
{'id1': {'amount': 123.0,
'due': datetime.date(2018, 3, 10),
'new_val': 'Pass',
'status': 'Done'},
'id2': {'amount': 0,
'due_date': datetime.date(2018, 3, 10),
'new_val': 'Fail',
'old_status': 'Done'}}
<强>设置强>
import datetime
d1 = {
'id1': {
'due': datetime.date(2018, 3, 10),
'status': 'Done',
}, 'id2': {
'due_date': datetime.date(2018, 3, 10),
'old_status': 'Done',
}
}
d2 = {
'id1': {
'new_val': 'Pass',
'amount': 123.0,
}, 'id2': {
'new_val': 'Fail',
'amount': 0,
}
}
答案 1 :(得分:0)
对于字典x
和y
,z
成为合并字典,y中的值将替换x中的值。
在Python 3.5或更高版本中,:
z = {**x, **y}
在Python 2中,(或3.4或更低版本)编写一个函数:
def merge_two_dicts(x, y):
z = x.copy() # start with x's keys and values
z.update(y) # modifies z with y's keys and values & returns None
return z
和
z = merge_two_dicts(x, y)
答案 2 :(得分:0)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
... 28 more
Caused by: org.springframework.web.client.HttpClientErrorException: 401 null
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:85)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:707)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:660)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:620)
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:414)
at hew.presentation.service.UserService.login(UserService.java:30)
at hew.presentation.controller.LoginController.handleSignIn(LoginController.java:56)
... 38 more
输出
dict1={
'UUID(id1)': {
'due': 'datetime.date(2018, 3, 10)',
'status': 'Done'
}, 'UUID(id2)': {
'due_date': 'datetime.date(2018, 3, 10)',
'old_status': 'Done'
}
}
dict2={'UUID(id1)':{
'new_val': 'Pass',
'amount': 123.0
},
'UUID(id2)': {
'new_val': 'Fail',
'amount': 0
}
}
finaldict = {key:(dict1[key], dict2[key]) for key in dict1}
print(finaldict)