如何在Python字典上执行set操作?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在Python字典上执行set操作?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2268字,纯文字阅读大概需要4分钟。
内容图文
虽然能够在字典的键之间进行设置操作是非常有用的,但我经常希望我可以在字典本身上执行设置操作.
我找到了一些服用the difference of two dictionaries的食谱,但我发现这些食谱非常冗长,并且觉得必须有更多的pythonic答案.
解决方法:
tl; dr Recipe:{k:d1.get(k,k in d1或d2 [k])in k in set(d1)| set(d2)}和|可以用任何其他集合运算符替换.
基于@ torek的评论,另一个可能更容易记住的方法(虽然完全一般)是:{k:d1.get(k,d2.get(k))对于集合中的k(d1)|组(D2)}.
完整答案如下:
我的第一个答案没有正确处理评估为False的值.这是一个处理Falsey值的改进版本:
>>> d1 = {'one':1, 'both':3, 'falsey_one':False, 'falsey_both':None}
>>> d2 = {'two':2, 'both':30, 'falsey_two':None, 'falsey_both':False}
>>>
>>> print "d1 - d2:", {k:d1[k] for k in d1 if k not in d2} # 0
d1 - d2: {'falsey_one': False, 'one': 1}
>>> print "d2 - d1:", {k:d2[k] for k in d2 if k not in d1} # 1
d2 - d1: {'falsey_two': None, 'two': 2}
>>> print "intersection:", {k:d1[k] for k in d1 if k in d2} # 2
intersection: {'both': 3, 'falsey_both': None}
>>> print "union:", {k:d1.get(k, k in d1 or d2[k]) for k in set(d1) | set(d2)} # 3
union: {'falsey_one': False, 'falsey_both': None, 'both': 3, 'two': 2, 'one': 1, 'falsey_two': None}
union的版本是最通用的,可以变成一个函数:
>>> def dict_ops(d1, d2, setop):
... """Apply set operation `setop` to dictionaries d1 and d2
...
... Note: In cases where values are present in both d1 and d2, the value from
... d1 will be used.
... """
... return {k:d1.get(k,k in d1 or d2[k]) for k in setop(set(d1), set(d2))}
...
>>> print "d1 - d2:", dict_ops(d1, d2, lambda x,y: x-y)
d1 - d2: {'falsey_one': False, 'one': 1}
>>> print "d2 - d1:", dict_ops(d1, d2, lambda x,y: y-x)
d2 - d1: {'falsey_two': None, 'two': 2}
>>> import operator as op
>>> print "intersection:", dict_ops(d1, d2, op.and_)
intersection: {'both': 3, 'falsey_both': None}
>>> print "union:", dict_ops(d1, d2, op.or_)
union: {'falsey_one': False, 'falsey_both': None, 'both': 3, 'two': 2, 'one': 1, 'falsey_two': None}
如果项目都在两个词典中,则将使用d1中的值.当然,我们可以通过改变函数参数的顺序来返回d2中的值.
>>> print "union:", dict_ops(d2, d1, op.or_)
union: {'both': 30, 'falsey_two': None, 'falsey_one': False, 'two': 2, 'one': 1, 'falsey_both': False}
内容总结
以上是互联网集市为您收集整理的如何在Python字典上执行set操作?全部内容,希望文章能够帮你解决如何在Python字典上执行set操作?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。