关于python:使用点(。)访问字典键

Accessing dictionary keys using dot(.)

本问题已经有最佳答案,请猛点这里访问。

我不能用点(.)访问字典键,但是当我定义从dict继承的类时,我可以用点(.)访问它的键。有人能解释一下吗?

所以,当我运行此代码时:

1
2
d = {'first_key':1, 'second_key':2}
d.first_key

我得到这个错误:

1
'dict' object has no attribute 'first_key'

但当我运行这个时:

1
2
3
4
5
6
7
class DotDict(dict):
    pass
d = DotDict()
d.first_key = 1
d.second_key = 2
print(d.first_key)
print(d.second_key)

我明白这一点:

1
2
1
2


在第一种情况下,您将创建属于Dictionary对象的键和值。在第二种情况下,您正在创建一个类的属性,该类与您继承的字典父类无关。


通过运用你的例子

1
2
3
4
5
6
7
8
class DotDict(dict):
    pass

d = DotDict()
d.first_key = 1
d.second_key = 2
print(d.first_key)
print(d.second_key)

您将实例参数first_keysecond_key设置为您的DotDict类,但不设置为字典本身。您可以看到,如果您只是将字典内容放到屏幕上:

1
2
In [5]: d
Out[5]: {}

因此,它只是一个空的dict。您可以用常见的方式访问字典:

1
2
3
4
5
6
7
8
In [1]: d={}

In [2]: d['first'] = 'foo'

In [3]: d['second'] = 'bar'

In [4]: d
Out[4]: {'first': 'foo', 'second': 'bar'}


如果要访问dict元素,需要通过keys访问。

1
d['first_key']

输出:

1
1

如果要使用(.)访问,请使用get

使用get可以得到所需的值

1
2
d = {'first_key':1, 'second_key':2}
print(d.get('first_key'))

输出:

1
1

关于class,您正在访问class的属性。因此,您必须使用(.)访问。