我有两个列表的字典:
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化的方式是什么?
答案 0 :(得分:2)
您可以使用dict理解来遍历dic2
的项,以使用集合差异为相同键的dic2
和dic1
的列表之间的差异建立新的映射,同时在两个字典中过滤出具有相同列表值的键:
{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]