Python dictionary keys()方法

2024-09-30 06:16:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道dictionary 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)

输出为:

^{pr2}$

我可以理解indicates1工作得很好,因为(0, 'cat')是其中一个关键,但是为什么索引的结果是相同的呢?如有任何提示,我们将不胜感激。顺便说一句,对于大数据集来说,指数的性能远远好于指标1。在


Tags: 方法in密码fordictionaryifkeyscat
3条回答

在python2.x上,dict.keys或多或少毫无价值。您可以直接迭代字典的键:

for key in d:
    ...

这将比迭代键更有效:

^{2}$

这就形成了一个单独的列表,然后然后有效地对其进行迭代两次+一堆额外的内存开销,比如一个丢弃的列表,等等


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

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)list构造和一个O(N)查找,以查看该项是否在列表中,而不是对键进行简单的O(1)哈希查找。在

值得注意的是,如果你真的需要一个字典的键列表,你可以很容易地得到它

list(d)

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

同样值得指出的是,与list的O(n)成员身份测试相比,python3.x中的set类对象(称为dict_keys对象)也具有O(1)成员身份测试(这是对看起来像set的对象的预期)。在

因此,在python2.xpython3.x中,这是一件很好的事情,当您试图编写与以下任何一种兼容的代码时,请记住这一点

两者都只引用(迭代)字典键。在

for i in dic:

等于

^{2}$

x in dict其中dict是python字典返回True当且仅当{}是{}中某个条目的键。在

相关问题 更多 >

    热门问题