【问题标题】:Python dictionary manipulation from dot notation点符号的 Python 字典操作
【发布时间】:2016-01-31 20:44:14
【问题描述】:

我想做的是从字符串创建一个“字典路径”。我不认为这是正确的术语,但基本上,如果我有一本看起来像这样的字典:

'myDict'{
    'classes':{
        'students':{
            'grades':{
                'grade':'A'
            }
        }  
    }
}

我有一个名为 current_dict 的变量,其中现在有 myDict,所以 current_dict = myDict,以及一个存储为 "classes.students.grades" 的字符串,我想操作该字符串以便我拥有 [classes][students][grades] .但是,我希望能够使用它来重新分配current_dict。所以,我想说current_dict = myDict['classes']['students']['grades']。我尝试将字符串转换为"[classes][students][grades]",但这不起作用,因为它将整个内容标识为单个字符串,包括括号。如何操作"classes.students.grades" 以便重新分配current_dict = myDict['classes']['students]['grades']?因此,在我完成此操作后,current_dict 将变为 grades 并且看起来像:

{
    grade': 'A'
}

【问题讨论】:

  • 使用class 对象或collections.namedtuple;在某些时候你可能需要用collections.defaultdict作弊,见docs.python.org/2/library/collections.html
  • 看起来您正在尝试重新发明面向对象的编程,但有点从里到外。你有什么理由不只使用对象吗?

标签: python dictionary syntax


【解决方案1】:

这样的?

current_dict = myDict
mystring = "classes.students.grades"
myPath = mystring.split(".")
for part in myPath:
    current_dict = current_dict[part]

但我认为可能有一种更简单的方法来做到这一点,只要你告诉我们你想要这个做什么。

【讨论】:

    【解决方案2】:

    试试这个:

    string1='classes.students.grades'
    string2=string1.split('.')
    myDict[string2[0]][string2[1]][string2[2]]['grade2']='B'
    myDict
    

    我的输出是

    {'classes': {'students': {'grades': {'grade1': 'A', 'grade2': 'B'}}}}
    

    请注意,我在字典中将等级更改为等级 1。为什么不使用 pandas DataFrame?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      相关资源
      最近更新 更多