【问题标题】:How do I return dictionary value as variable within the class如何在类中将字典值作为变量返回
【发布时间】:2019-01-17 16:48:39
【问题描述】:

我有以下类,它返回给定kwargs 作为输入的字典。

class Emp_Constant:
    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)

但是,在某些情况下,我想将字典作为输入传递给此类,并将键值作为变量访问。

例如,如果我的字典是{'name': 'Tome', 'age':'26'},那么 我想按如下方式访问“Tom”:

set = {'name': 'Tom', 'age':'26'}
a = Emp_Constant(set)
first_emp = a.NAME (where NAME is a variable that holds value of key 'name')

这有可能实现吗?

【问题讨论】:

  • 这个link是另一种方式

标签: python


【解决方案1】:

只需使用字典解包

a = Emp_Constant(**set)

【讨论】:

    【解决方案2】:

    当然,使用“double-splat”运算符将字典解包为关键字参数,然后使用getattr

    In [30]: class Emp_Constant:
        ...:     def __init__(self, **kwargs):
        ...:         for key, value in kwargs.items():
        ...:             setattr(self, key, value)
        ...:
    
    In [31]: data = {'name': 'Tom', 'age':'26'}
        ...: a = Emp_Constant(**data)
        ...:
        ...: NAME = 'name'
        ...:
        ...:
    
    In [32]: getattr(a, NAME)
    Out[32]: 'Tom'
    

    【讨论】:

      【解决方案3】:

      您的意思是,您希望班级以任何一种方式记录姓名和年龄?

      怎么样:

      class Emp_Constant:
      def __init__(self, useADict=None, **kwargs):
          if useADict:
              self.name = useADict.name
              self.age = useADict.age
          else:
              for key, value in kwargs.items():
                  setattr(self, key, value)
      

      【讨论】:

        【解决方案4】:

        使用obj_dict = Emp_Constant(**set)


        另一种方式,使用EasyDict 库:

        from easydict import EasyDict as edict
        
        set = {'name': 'Tom', 'age':'26'}
        obj_dict = edict(set)
        
        print(obj_dict.name)
        

        [输出]:

        'Tom'
        

        【讨论】:

          【解决方案5】:

          问题是您将字典作为第一个参数传递,而不是在您的示例中使用 **-,您应该这样做:

          set = {'name': 'x', 'age': 10}
          a = Emp_Constant(**set)
          

          然后就可以访问a.name

          【讨论】:

            猜你喜欢
            • 2021-02-27
            • 2015-12-08
            • 1970-01-01
            • 2016-03-14
            • 1970-01-01
            • 1970-01-01
            • 2021-02-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多