前言

当 python 某个字典内的键值对非常的多,又必须要频繁调用这个字典时,就需要写大量的中括号 + 引号,这对于写代码和阅读者都是很麻烦的事情,特别是字典多级嵌套字典的情况。

示例

假设有一个字典如下,红框内,使用属性调用的方式比常规使用方式代码可读性和整洁性都更好。

点击查看代码
js = {
'type': 'normal',
'chip': 'F350016748',
'index': '67',
'time': '2023-07-26',
'fastq': {
    'fqR1': 'a.fq',
    'fqR2': 'b.fq',
  }
}

image

实现方式

将原生字典转换成类,该类的代码如下:

点击查看代码
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])