Python:dict-within-dict,通配符第一个键

2024-04-25 07:12:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在dict中匹配dict的数据。这个:

print(a["myval"]["val1"])

工作以获得所需的输出。 不过,我想“通配符”的myval项目。同时输出myval2的结果

print(a['*']["val1"])

但这不起作用。你知道吗

我目前的方法似乎很笨拙:

for i in iter(a):
       print(i)
       print(a[i]["val1"])

当我选择val3时,它也会中断。这是我的字典

a = {
        "myval" : {
                "val1" : True,
                "val2" : 1,
        },
        "myval2" : {
                "val1" : False,
                "val2" : 0,
                "val3" : [1, 2, 3],
        }
}

Tags: 数据项目方法infor字典dictprint
3条回答

下面是一个类似于Michael Bianconi的答案的解决方案,它允许您使用这样的结果对象:

class UniversalIndexer:
    def __init__(self, dct):
        self.dct = dct

    def __getitem__(self, item):
        return [self.dct[key][item] for key in self.dct if key != "*"]

a = {
    "myval" : {
        "val1" : True,
        "val2" : 1,
    },
    "myval2" : {
        "val1" : False,
        "val2" : 0,
        "val3" : [1, 2, 3],
    }
}
a["*"] = UniversalIndexer(a)

dict在Python中不支持通配符。但是,您可以尝试以下操作:

desired_key = "val3"
vals = [ a[key][desired_key] for key in a.keys() if desired_key in a[key] ]

这将在某个第二层键(如果该键存在)下创建一个包含所有第二层元素的数组。你知道吗

您可以通过将a['*']设置为将充当通配符的函数来实现这个版本。你知道吗

def getAll(your_dict, search_for):
  values = []
  for key, value in your_dict.items():
    if type(value) == dict and  search_for in value:
      values.append(value[search_for])
  return values

a = {
        "myval" : {
                "val1" : True,
                "val2" : 1,
        },
        "myval2" : {
                "val1" : False,
                "val2" : 0,
                "val3" : [1, 2, 3],
        },
        "*": lambda key: getAll(a, key)
}

然后叫它

a['*']('val1')  # >>> [True, False]

您正在将a['*']设置为一个函数,该函数将返回一个从所有内部dict获取的值数组。你知道吗

相关问题 更多 >