前言
当 python 某个字典内的键值对非常的多,又必须要频繁调用这个字典时,就需要写大量的中括号 + 引号,这对于写代码和阅读者都是很麻烦的事情,特别是字典多级嵌套字典的情况。
示例
假设有一个字典如下,红框内,使用属性调用的方式比常规使用方式代码可读性和整洁性都更好。
点击查看代码
js = {
'type': 'normal',
'chip': 'F350016748',
'index': '67',
'time': '2023-07-26',
'fastq': {
'fqR1': 'a.fq',
'fqR2': 'b.fq',
}
}
实现方式
将原生字典转换成类,该类的代码如下:
点击查看代码
class Dict2Attr:
""" 将字典转换成类的属性,避免过多的括号和引号 """
def __init__(self, js):
self.__dict__.update(js)
for key, value in js.items():
if isinstance(value, dict):
self.__dict__[key] = Dict2method(value)
elif isinstance(value, list):
self.__dict__[key] = self.traverse_list(value)
def traverse_list(self, in_list):
new_list = []
for value in in_list:
if isinstance(value, dict):
new_list.append(Dict2method(value))
elif isinstance(value, list):
new_list.append(self.traverse_list(value))
else:
new_list.append(value)
return new_list
注意事项
- utf-8 类型的服务器上可以用中文作为键来使用(
cls.打印你好
) - 输入字典内的任意子字典都会被转化成类对象,即都可以使用属性的方式调用了。都会被转化成类对象,即都可以使用属性的方式调用了。
- 如果遇到数字作为键,那只能通过调用类的字典属性访问元素了。(
cls.__dict__[key]
)