从另外两个字典的差异中创建字典的最佳方法是什么?

时间:2019-03-08 22:51:30

标签: python python-2.7 dictionary difference

我有两个列表的字典:

import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import { Route, BrowserRouter as Router, Switch } from "react-router-dom";
import CheckButton from "./components/CheckUpButton/CheckUpButton";
import "semantic-ui-css/semantic.min.css";

const routing = (
  <Router>
    <div>
      <Switch>
        <Route exact path="/" component={CheckButton} />
      </Switch>
    </div>
  </Router>
);

ReactDOM.render(routing, document.getElementById("app"));

并希望只有第三本的字典中只有第三本的字典中的第三本:

dic1 = {'a' : [3, 4, 5], 'b' : [0, 1, 2]}
dic2 = {'a' : [3, 4, 5], 'b' : [8, 1, 2, 30], 'c' : [9, 8, 2]}

在python dic3 = {'b' : [8, 30], 'c' : [9, 8, 2]} 及以下版本中,最Python化的方式是什么?

3 个答案:

答案 0 :(得分:2)

您可以使用dict理解来遍历dic2的项,以使用集合差异为相同键的dic2dic1的列表之间的差异建立新的映射,同时在两个字典中过滤出具有相同列表值的键:

{k: list(set(l).difference(dic1.get(k, []))) for k, l in dic2.items() if dic1.get(k) != l}

这将返回:

{'b': [8, 30], 'c': [8, 9, 2]}

答案 1 :(得分:1)

(没有dict理解)

您可以使用difference个对象上的set

dic1 = {'a' : [3, 4, 5], 'b' : [0, 1, 2]}
dic2 = {'a' : [3, 4, 5], 'b' : [8, 1, 2, 30], 'c' : [9, 8, 2]}

for k, v in dic2.items():
    if k in dic1.keys():
        new_v = list(set(v).difference(dic1[k]))
        if len(new_v) > 0: dic3[k] = new_v
    else:
        dic3[k] = v

这将提供所需的输出。

答案 2 :(得分:0)

如果dic2中没有dic1的任何键,或者两个字典中对应于任何键的值都不相同,则在另一个字典中添加该键和值对。

 for k in dic2.keys():
   if (k not in dic1.keys()) or (dic1[k] != dic2[k]):
     dic3[k] = dic2[k]