数据来自数据库和csv文件。 我必须尽快比较它们,并通过相应的值更新数据库表。 假设dict d1来自数据库,而d2来自输入文件。 主键是数据库中的主键。 (这里是1和2)
d1[1] = {'a': 10, 'b': 20}
d1[2] = {'a': 11, 'b': 21}
现在数据来自输入文件:
d2[1] = {'b': 10, 'a': 20}
d2[2] = {'b': 21, 'a': 19}
您可以看到,键1的所有值都不同,而键2的只有“ a”值不同。 我有以下查询:
print({o: ({b: d2[o][b]}) for o in d1.keys() for b in d2[o].keys() if d1[o][b] != d2[o][b]})
预期结果将是:
{1: ({'a': 20}, {'b': 10}), 2: {'a': 19}}
我得到的不是这个结果(我没有列出1的所有修改值):
{1: {'a': 20}, 2: {'a': 19}}
我想念什么?
答案 0 :(得分:2)
您需要将列表组件嵌套在字典组件中。
{o: [{b: d2[o][b]} for b in d2[o].keys() if d1[o][b] != d2[o][b]] for o in d1.keys()}
答案 1 :(得分:0)
这是解决方案(如果您不介意更详细的解决方案)
d1={}
d2={}
d1[1] = {'a': 10, 'b': 20}
d1[2] = {'a': 11, 'b': 21}
d2[1] = {'b': 10, 'a': 20}
d2[2] = {'b': 21, 'a': 19}
d4={}
for o in d1.keys():
d3=[]
for b in d2[o].keys():
if d1[o][b] != d2[o][b]:
d3.append({b: d2[o][b]})
d4.update({o:tuple(d3)})
print(d4) # require solution.
# print {1: ({'b': 10}, {'a': 20}), 2: ({'a': 19},)}
在您的代码中,您忘记添加/更新内部值。