- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
通过阅读一些代码并尝试理解字典中 None 的用法来学习一些Python。您能否对以下片段提供更多说明。以及 = None 的用法。
for pc in csv_dict:
if pc in shp_dict:
matched[pc] = None
else:
csv_not_in_shp[pc] = None
谢谢
最佳答案
我认为您感到困惑是对的,因为我认为这并不是 Python 编码的最佳示例。只需查看标识符名称,我们就可以看出作者的意图:
for pc in csv_dict:
if pc in shp_dict:
matched[pc] = None
else:
csv_not_in_shp[pc] = None
这里我们有一个 csv_dict
和 shp_dict
进来,我们正在写入另外两个名为 matched
或 的字典>csv_not_in_shp
。显然,这是为稍后设置的类似测试,作者可以看到:
if thing in matched:
# it was in both csv_dict and shp_dict earlier
elif thing in csv_not_in_shp:
# it wasn't so do something else
当你像这样分解它时,你已经可以开始看到问题了。例如,为什么这里需要 elif
?这很容易被重写:
if thing in matched:
# it was in both csv_dict and shp_dict earlier
else:
# it wasn't so do something else
这(可能是正确的)表明 csv_not_in_shp
根本没有必要。
但是让我们相信原作者是无罪的。也许 csv_dict
和 shp_dict
在此比较时不会出现。 (相当弱的理由,因为它们可能是从matched
和csv_not_in_shp
相同的地方传递的,但是......)这里的真正问题问题是作者使用 None
作为该值,因为他不关心该值是什么。换句话说,他经常将其用作 NULL
占位符。
问题是,这是因为他没有将键映射到值。作者忽略了集合的一个明确用例。观察:
matched = set()
for pc in csv_dict:
if pc in shp_dict:
matched.add(pc)
现在我们正在说出我们真正的意思。这是一个说明该概念的基本示例。令 d
是将字母“a”到“e”映射到数字 0 到 4 的字典,而 d_
是将“d”映射到“g”的字典数字 3 到 6。(我将在下面使用 OrderedDicts
,以便按键以更易读的格式呈现。否则它们是不必要的。)
>>> import string
>>> from collections import OrderedDict as od
>>> d = od([(k,v) for k, v in zip(string.ascii_lowercase[:5], range(5))])
>>> d_ = od([(k,v) for k, v in zip(string.ascii_lowercase[3:7], range(3,7))])
>>> d
OrderedDict([('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4)])
>>> d_
OrderedDict([('d', 3), ('e', 4), ('f', 5), ('g', 6)])
>>> matched = set()
>>> for key in d:
... if key in d_:
... matched.add(key)
...
>>> matched
{'e', 'd'}
有了集合,我们仍然可以进行in
匹配,这就是我们首先想要的:
>>> 'a' in matched
False
>>> 'd' in matched
True
当然,最好的事情是整个事情可以简化为一个集合理解:
>>> {key for key in d if key in d_}
{'e', 'd'}
因此 matched = {pc for pc in csv_dict if pc in shp_dict}
会更正确地用一组替换原始代码,按照我的示例。
关于python - 理解 d[key] = None 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23041003/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我有实体: @Entity @Table(name = "CARDS") public class Card { @ManyToOne @JoinColumn(name = "PERSON_I
我正在尝试计算二维多边形的表面法线。我正在使用 OpenGL wiki 中的 Newell 方法来计算表面法线。 https://www.opengl.org/wiki/Calculating_a_S
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我这里有以下 XML: Visa, Mastercard, , , , 0, Discover, American Express siteonly, Buyer Pay
即将发生的 Google 政策变更迫使我们实现一个对话框,以通知欧盟用户有关 Cookie/设备标识符用于广告和分析的情况。我只想向欧盟用户显示此对话框。我不想使用额外的权限(例如 android.p
本文分享自华为云社区《华为大咖说 | 企业应用AI大模型的“道、法、术” ——道:认知篇》,作者:华为云PaaS服务小智。 本期核心观点 上车:AGI是未来5~10年内,每个人都无法回避的技
我有一个与酒精相关的网站,需要先验证年龄,然后才能让他们进入该网站。我使用 HttpModule 来执行此操作,该模块检查 cookie,如果未设置,我会将它们重定向到验证页面。我验证他们的年龄并存储
在欧盟,我们有一项法律,要求网页请求存储 cookie 的许可。我们大多数人都了解 cookie 并同意它们,但仍然被迫在任何地方明确接受它们。所以我计划编写这个附加组件(ff & chrome),它
以下在 C 和/或 C++ 中是否合法? void fn(); inline void fn() { /*Do something here*/ } 让我担心的是,第一个声明看起来暗示函数将被定义
我是一名优秀的程序员,十分优秀!