Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 隐藏字典键_Python_Dictionary - Fatal编程技术网

Python 隐藏字典键

Python 隐藏字典键,python,dictionary,Python,Dictionary,我有一个字典,它是从一个我无权访问代码的函数传递给我的。在这本词典中有一个键叫做“time”。我可以打印d['time']并打印我期望的值。但是,当我遍历字典时,会跳过该键。另外d.keys()不包括它。如果重要的话,其他键都是数字键 我该如何重现这个?您如何在不知道名称的情况下查看隐藏的密钥?这可以撤销吗 打印类型(d)返回由于任何类都可以重新定义\uuu getitem\uuuuuuuuuuu(对于dict子类,\uuuu missing\uuuuuuuu)。如果文档没有涵盖它,除了检查源代

我有一个字典,它是从一个我无权访问代码的函数传递给我的。在这本词典中有一个键叫做
“time”
。我可以
打印d['time']
并打印我期望的值。但是,当我遍历字典时,会跳过该键。另外
d.keys()
不包括它。如果重要的话,其他键都是数字键

我该如何重现这个?您如何在不知道名称的情况下查看隐藏的密钥?这可以撤销吗


打印类型(d)
返回

由于任何类都可以重新定义
\uuu getitem\uuuuuuuuuuu
(对于
dict
子类,
\uuuu missing\uuuuuuuu
)。如果文档没有涵盖它,除了检查源代码之外,没有明确定义的方法来发现任何给定对象中可用的“隐藏键”。

首先:不要假设它是字典,测试它,bult in function type(d)将告诉您d对象的类/类型。注意:不要使用类型来检查类型,因为要使用isinstance函数

要回答您的问题:是的,可以这样做,请参见以下内容:

此外,如果您正在调查dict,请不要忘记dict.items,它类似于键,但会打印出键和值

最后,不要使用打印调试,请使用或

这个简单的组合

import pdb; pdb.set_trace()
将在您需要的地方为您提供交互式控制台


所以我想说这很有可能。它只是关于getitem。。。不,它很可能是不可逆转的

正如其他人所说,这可以通过多种方式实现。也许最简单的是
defaultdict
,尽管这会在查找时添加键:

import time
from collections import defaultdict

with_hidden_key = defaultdict(time.time, {
    "foo": 123,
    "bar": 1024,
    "bash": "YOLO",
})
具体情况取决于实际发生的情况。

简单复制:

class fake_dict(dict):
    def __getitem__(self, item):
        if item == 'time':
            return 'x' 


d = fake_dict({'a': 'b', 'c': 'd'})
assert isinstance(d, dict)
assert 'time' not in d.keys()
print d  # {'a': 'b', 'c': 'd'}
assert d['time'] == 'x'

你能粘贴代码片段吗?它可能是一个类的实例,类似于一个字典?当你
print d
时会发生什么?@wwii当我
print d
时,我得到了与
d.keys()相同的集合。你找到函数返回的对象类型了吗?我周一回去工作时会这样做,谢谢你的提示。另一个答案在某种程度上取决于这一结果。我尽量避免像“不要做某事”这样的绝对说法。战略布局的打印语句/功能非常有用。此回复非常有用。我不知道我可以得到这种调试。不幸的是,我没有访问底层代码的权限,所以现在我只能使用他们给我的东西。听起来默认字典类型没有隐藏键的空间,因此如果没有代码访问权限,我无法真正了解发生了什么。我突然想到,如果代码是用Python编写的(但您没有源代码,只有编译的
.pyc
文件),您可能可以使用反汇编程序在其中进行深入研究(
dis
module)查找一些资料。
class fake_dict(dict):
    def __getitem__(self, item):
        if item == 'time':
            return 'x' 


d = fake_dict({'a': 'b', 'c': 'd'})
assert isinstance(d, dict)
assert 'time' not in d.keys()
print d  # {'a': 'b', 'c': 'd'}
assert d['time'] == 'x'