微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不创建新键的情况下访问 for 循环内的现有字典键?

如何解决如何在不创建新键的情况下访问 for 循环内的现有字典键?

我有一个像这样的字典列表

names = [{'id':1,'name': 'Alice','dep_name':'Pammy','is_dep_minor':True,'is_insured':False},{'id':2,'dep_name':'Trudyl','is_dep_minor':False,'is_insured':True},{'id':3,'name': 'Bob','dep_name':'Charlie',]

我想创建一个新的统一字典,其中包含稍后将填充的新属性。当 Alice 可以嵌套在里面时,我计划消除它需要有两个 dicts 的需要。这是我目前所拥有的。

results = []
for name in names:
    newdict = defaultdict(dict)
    newdict[name[name]]["NEWKEY"] = None # to be filled in later
    newdict[name[name]]["ANOTHERKEY"] = None # to be filled in later

    innerdict = defaultdict(dict)
    innerdict["dep_name"]["is_minor"] = name["is_dep_minor"]
    innerdict["dep_name"]["is_insured"] = name["is_insured"]

    newdict[name[name]]["DEPENDENTS"] = innerdict
    results.append(newdict)

这给了我

[
  {
    "Alice" : {
      "NEWKEY" : None,"ANOTHERKEY" : None,"DEPENDENTS" : {
          "Pammy" : {
              "is_minor" : True,"is_insured" : False
           }
      }
   }
  },{
    "Alice" : {
      "NEWKEY" : None,"DEPENDENTS" : {
          "Trudy" : {
              "is_minor" : False,"is_insured" : True
           }
       }
    }
  },# and the list goes on
]

我的目标是

  {
    "Alice" : {
      "NEWKEY" : None,"is_insured" : False
           },"Trudy" : {
              "is_minor" : False,

有人可以帮我解决这个问题吗?提前致谢

解决方法

我找到了解决问题的方法。我就是这样做的

results = {}

def create_dict():
    newdict = {}
    newdict["NEWKEY"] = None # to be filled in later
    newdict["ANOTHERKEY"] = None # to be filled in later

    innerdict = defaultdict(dict)
    innerdict["dep_name"]["is_minor"] = name["is_dep_minor"]
    innerdict["dep_name"]["is_insured"] = name["is_insured"]

    newdict["DEPENDENTS"] = innerdict

    return newdict

for name in names:
    if name["name"] in results.keys():
        dname = name["dep_name"]
        is_minor = name["is_dep_minor"]
        is_insured = name["is_dep_insured"]

        name = results.get(name["name"])
        name["DEPENDENT"][dname]["is_dep_minor"] = is_minor
        name["DEPENDENT"][dname]["is_dep_insured"] = is_insured
    else:
        newdict = create_dict()
        results[name["name"]] = newdict

这个东西给出了想要的输出

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。