Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >python字典更新差异

python字典更新差异
EN

Stack Overflow用户
提问于 2009-04-03 11:04:34
回答 6查看 5.8K关注 0票数 6

python有没有任何内置的功能,可以在dict更新时通知哪些字典元素发生了变化?例如,我正在寻找一些类似如下的功能:

代码语言:javascript
运行
AI代码解释
复制
>>> a = {'a':'hamburger', 'b':'fries', 'c':'coke'}
>>> b = {'b':'fries', 'c':'pepsi', 'd':'ice cream'}
>>> a.diff(b)
{'c':'pepsi', 'd':'ice cream'}
>>> a.update(b)
>>> a
{'a':'hamburger', 'b':'fries', 'c':'pepsi', 'd':'ice cream'}

我希望获得更改后的值的字典,如a.diff(b)的结果所示

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-04-03 11:23:18

不能,但您可以子类化dict来提供更改通知。

代码语言:javascript
运行
AI代码解释
复制
class ObservableDict( dict ):
    def __init__( self, *args, **kw ):
        self.observers= []
        super( ObservableDict, self ).__init__( *args, **kw )
    def observe( self, observer ):
        self.observers.append( observer )
    def __setitem__( self, key, value ):
        for o in self.observers:
            o.notify( self, key, self[key], value )
        super( ObservableDict, self ).__setitem__( key, value )
    def update( self, anotherDict ):
        for k in anotherDict:
            self[k]= anotherDict[k]

class Watcher( object ):
    def notify( self, observable, key, old, new ):
        print "Change to ", observable, "at", key

w= Watcher()
a= ObservableDict( {'a':'hamburger', 'b':'fries', 'c':'coke'} )
a.observe( w )
b = {'b':'fries', 'c':'pepsi'}
a.update( b )

请注意,这里定义的超类Watcher不会检查是否有“真正的”更改;它只是说明有更改。

票数 11
EN

Stack Overflow用户

发布于 2010-05-25 12:02:04

一年后

我喜欢以下解决方案:

代码语言:javascript
运行
AI代码解释
复制
>>> def dictdiff(d1, d2):                                              
        return dict(set(d2.iteritems()) - set(d1.iteritems()))
... 
>>> a = {'a':'hamburger', 'b':'fries', 'c':'coke'}
>>> b = {'b':'fries', 'c':'pepsi', 'd':'ice cream'}
>>> dictdiff(a, b)
{'c': 'pepsi', 'd': 'ice cream'}
票数 9
EN

Stack Overflow用户

发布于 2009-04-03 11:13:36

不,不需要。但是编写一个字典diff函数并不难:

代码语言:javascript
运行
AI代码解释
复制
def diff(a, b):
  diff = {}
  for key in b.keys():
    if (not a.has_key(key)) or (a.has_key(key) and a[key] != b[key]):
      diff[key] = b[key]
  return diff
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/715234

复制
相关文章
RestEasy 默认 http 返回头部没有Content-Length
没有content - length 字段 因为要对方是http长连接,需要根据长度获取包体,性能好一些。 长连接有沾包的问题,要用Content-length切割body
MickyInvQ
2020/09/27
1.2K0
RestEasy 默认 http 返回头部没有Content-Length
【AngularJS】 # AngularJS入门
ng-app 指令定义一个 AngularJS 应用程序。 若不声明,将直接显示表达式。
全栈程序员站长
2022/09/15
23.6K0
【AngularJS】 # AngularJS入门
mysql中length函数_length中文
归纳: 应用场景 1.查询字符串长度length(str) 2.查询列最大字符串长度max(length(str)) 3.查询某个字符出现几次 length(str1)-length(replace(‘str1’,’str2’,”)) 4.length求得是字符长度。 【1个中文、英文字母、数字、中文符号、英文符号、全角符号、空格都算1个字符】
全栈程序员站长
2022/08/18
2.6K0
mysql中length函数_length中文
push is not a function data.length返回undefined解决方案-Javascript学习笔记
于是我尝试使用length看能不能获取他的长度然后循环放入其他变量再赋值回去能否解决,竟然length也获取不到长度
田小檬
2023/08/24
4040
string的length方法(数组length方法)
The maximum string content length quota (8192) has been exceeded while reading XML data. This quota may be increased by changing the MaxStringContentLength property
全栈程序员站长
2022/07/25
9040
TypeError: object()
对于上面这个错误,很容易迷惑我们,因为这个错误信息没有很明确的指出,到底是哪段代码除了问题。那这个错误是怎么产生的了,请听我细细道来。
py3study
2020/01/06
1.1K0
LENGTH 和 CHAR_LENGTH 的区别
char(N) 和 varchar(N) 这里的N指的是字符长度,而不是字节长度。就是说可以插入N个字符的长度的内容(不管插入的是英文还是中文,反正是按照长度算的)。
保持热爱奔赴山海
2019/09/18
1.1K0
Python报错TypeError: '<' not supported between instances of 'str' and 'int'
分析:input()返回的数据类型是str,不能直接和整数进行比较,必须先把str换成整数,使用int()方法
BH8ANK
2021/01/28
5K0
【AngularJS】—— 1 初识AngularJs
怀着激动与忐忑的心情,开始了学习AngularJS的旅程,很久之前就听说了这个前端框架,但是由于自己一直没有从事相关的工作,因此也没有进行学习。这次正好学习AngularJS,直接复习一下前端的知识。目前这里还是弱点,慢慢深入的学习。   AngularJS是Google的优秀的前端框架,目前已经应用于多个产品。   通过w3cschool.cc的学习,简单的了解了下它的使用方法,但是对于原理还没有理解。   AngularJs相对于其他的框架来说,有一下的特性:   1 MVVM   2 模块化
用户1154259
2018/01/17
2.8K0
关于Java中length、length()、size()的区别
@return the length of the sequence of characters represented by this object.
全栈程序员站长
2022/07/01
1.1K0
SQL函数 LENGTH
LENGTH 返回一个整数,表示给定字符串表达式的字符数,而不是字节数。字符串表达式可以是字符串(从中删除尾随空格)或数字( IRIS 将其转换为规范形式)。
用户7741497
2022/04/08
2K0
【AngularJS】—— 2 初识AngularJs(续)
前一篇了解了AngularJS的一些简单的使用,这里继续跟着w3c学习一下剩下的内容。   本篇根据w3cschool.cc继续学习AngularJS剩余的内容,包括:   1 事件   2 模块   3 表单   4 数据验证   5 bootstrap CSS风格   6 include包含其他页面   7 应用程序   8 参考手册   首先看一下html的事件   关于html的事件,文中给出了三个例子,点击、隐藏、显示。使用方法基本相同:   先看一下点击的例子,点击按钮后,会触发ng-clic
用户1154259
2018/01/17
2.3K0
python:TypeError: mu
 今天遇到这个错误: Traceback (most recent call last):   File "t2.py", line 14, in <module>     print Derived().meth()   File "t2.py", line 10, in meth     super(Derived,self).meth() TypeError: must be type, not classobj 试验代码如下: class Base():     def meth(self):   
py3study
2020/01/07
6170
JavaScript对象length
前几日有在Javascript数组操作一文中稍提及了数组的length属性;深入一点探究,就发现JS这length确有许多难为所知的特性。这就边学边探究下这朵奇葩属性;这里边深入边记载。 可变的数组length属性 和其他大多数语言不同的是,JavaScript数组的length属性是可变的,这一点需要特别注意。当length属性被设置得更大时,整个数组的状态事实上不会发生变化,仅仅是length属性变大;当length属性被设置得比原来小时,则原先数组中索引大于或等于length的元素的值全部被丢失。下面
晚晴幽草轩轩主
2018/03/27
2.6K0
SQL函数 $LENGTH
$LENGTH 返回指定字符串中的字符数或指定字符串中的子字符串数,具体取决于使用的参数。
用户7741497
2022/03/25
1.8K0
Length of Last Word
1. Description 2. Solution class Solution { public: int lengthOfLastWord(string s) { int
Tyan
2019/05/25
1K0
Length of Last Word
问题:最后一个单词的长度 分析,注意s=" a  b  "这种情况,从后遍历单词,遇到空格退出 class Solution { public: int lengthOfLastWord(const char *s) { int len=strlen(s); int sum=0; while(s[len-1]==' ') len--; for(int i=len-1;i>=0;i--) { if(
用户1624346
2018/04/17
1.2K0
TypeError: Network request failed
在使用react-native 进行网络请求时,报了这样的一个错误TypeError: Network request failed, 在检查自己代码没有错误的情况下,去设置一个xCode便可以走通,
杭州前端工程师
2018/06/15
3.3K0
点击加载更多

相似问题

从solaris移植到linux?

10

将shell脚本从Solaris移植到Linux

13

将应用程序从Solaris移植到Linux

44

将代码从Linux移植到Windows

23

将代码从Linux移植到MinGW

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档