gpt4 book ai didi

Python字典keys()方法

转载 作者:行者123 更新时间:2023-12-01 04:37:35 25 4
gpt4 key购买 nike

我试图弄清楚什么时候字典keys()方法是强制性的。这是我的代码。

rawFeats = [(0, 'mouse'), (1, 'black'), (0, 'cat'), (1, 'tabby'), (2, 'mouse')]
OHEDict = {(0, 'cat'): 1, (1, 'tabby'): 4, (2, 'mouse'): 5}
indices = {OHEDict[i]:1.0 for i in rawFeats if i in OHEDict}
indices1 = {OHEDict[i]:1.0 for i in rawFeats if i in OHEDict.keys()}

print "indices = {0}\nindices1 = {1}".format(indices, indices1)

输出是:

indices = {1: 1.0, 4: 1.0, 5: 1.0}
indices1 = {1: 1.0, 4: 1.0, 5: 1.0}

我可以理解索引1工作得很好,因为(0, 'cat')是键之一,但为什么索引会产生相同的结果?任何提示将不胜感激。顺便说一句,对于大数据集,索引的性能比索引1要好得多。

最佳答案

在 python2.x 上,dict.keys (恕我直言)或多或少毫无值(value)。您可以直接迭代字典的键:

for key in d:
...

这比迭代键更有效:

for key in d.keys():
...

它创建一个单独的列表,然后然后对其进行迭代 - 有效地进行两次迭代+一堆额外的内存开销,因为拥有一个一次性列表,等等,等等。

<小时/>

您的用例实际上是对 key 进行成员资格测试。区别在于:

x in some_list  # is "x" an item in the list?

x in some_dict  # is "x" a key in the dictionary?

list 对象进行成员资格测试的时间复杂度为 O(N),但对 dict 对象进行成员资格测试的时间复杂度为 O(1)。因此,对于循环的每个“回合”,您都会执行 O(N) 列表构造和 O(N) 查找来查看该项目是否在列表中,而不是简单的 O(1) 哈希查找关键。

值得注意的是,如果您确实确实需要字典键的列表,您可以轻松获得它1:

list(d)
<小时/>

幸运的是,python3.x已经朝着正确的方向迈出了一步。 d.keys() 在 python3.x 中返回一个类似于 set 的对象。例如,您可以使用它来有效地计算两个字典键的交集,这在某些情况下可能很有用。

还值得指出的是,python3.x 中类似 set 的对象(称为 dict_keys 对象)也具有 O(1) 成员资格测试(如下所示)与 list 的 O(n) 成员资格测试相比,我们期望看起来像 set 的东西。

1因此,这适用于 python2.x python3.x,因此当您尝试编写以下代码时记住这一点是一件好事兼容...

关于Python字典keys()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31468300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com