使用稍微不同的键集从dict初始化一个namedtuple

时间:2017-07-07 13:49:37

标签: python python-2.7 namedtuple

我有一个写json文件的日常流程:

{
  "oldfield1": 1,
  "oldfield2": "a",
}

和一个读取这些文件的python脚本,每个文件都放在一个对象中

import collections
import json
import os
MyRecord = collections.namedtuple("MyRecord",["oldfield1","oldfield2"])
mydata = {}
for fname in os.listdir("mydir"):
    with open(fname) as fd:
        mydata[fname] = MyRecord(**json.load(fd))

Tempora mutur和更新的文件现在有一个额外的字段:

{
  "oldfield1": 3,
  "oldfield2": "f",
  "newfield": [1,2,3],
}

现在上面的代码失败并出现此错误:

TypeError: __new__() got an unexpected keyword argument 'newfield'

我可以将newfield添加到MyRecord,但是它会在文件上失败。

什么是最好的方法?

  1. 我可以将newfield添加到MyRecordset MyRecord.__new__.__defaults__

  2. 我可以sanitize the dict

  3. 优先级

    1. 我想尽可能少地做:尽量减少我的代码修改(这意味着选项1)。
    2. 我还想最小化未来的代码修改:添加"futurefield"时,理想情况下,我不想做任何事情(这意味着选项2)。
    3. 最重要的是,我想保持代码可维护(选项1?)
    4. 就个人而言,我更喜欢第一种方法。 但是,我很想听听人们的想法。

0 个答案:

没有答案