Python 如何使用元组作为字典键集

Python 如何使用元组作为字典键集,python,dictionary,tuples,Python,Dictionary,Tuples,我将JSON文件解析为字典,下面是JSON数据示例 "environmental": { "temprature": { "test" : "temprature", "unit": "c", "now": 12.65, "now_timestamp": "10-06-2019 08:02:18", "min": "12.5", "min_t

我将JSON文件解析为字典,下面是JSON数据示例

 "environmental": {
      "temprature": {
           "test" : "temprature",
           "unit": "c", 

           "now": 12.65,
           "now_timestamp": "10-06-2019 08:02:18", 

           "min": "12.5", 
           "min_timestamp": "03-06-2019 07:40:02", 

           "max": "32.84", 
           "max_timestamp": "03-06-2019 04:30:03"
      }, 
我想知道是否有一种方法可以使用字符串或元组获取其中一个值

预期结果

logging.info(dictionary_page_data_file['environmental']['temprature']['now'])
我试过这个

thistuple = ("environmental", "temprature", "now")
logging.info(dictionary_page_data_file[thistuple])

这必须具有足够的动态性,以适应不同级别的词典

您可以使用键作为元组制作临时dict:

data = {
 "environmental": {
      "temprature": {
           "test" : "temprature",
           "unit": "c",

           "now": 12.65,
           "now_timestamp": "10-06-2019 08:02:18",

           "min": "12.5",
           "min_timestamp": "03-06-2019 07:40:02",

           "max": "32.84",
           "max_timestamp": "03-06-2019 04:30:03"
      }
}}

def keys_values(d, current_key=()):
    for k, v in d.items():
        yield current_key + (k, ), v
        if isinstance(v, dict):
            yield from keys_values(v, current_key + (k, ))

transformed_dict = {k: v for k, v in keys_values(data)}

print(transformed_dict[("environmental", "temprature", "now")])
print(transformed_dict[("environmental", "temprature", "min")])
print(transformed_dict[("environmental", "temprature", "max")])
印刷品:

12.65
12.5
32.84

您可以编写一个递归遍历字典的小函数,类似于注释中@tobias_k链接的答案:

dictionary_page_data_file = {
  "environmental": {
      "temprature": {
           "test" : "temprature",
           "unit": "c", 

           "now": 12.65,
           "now_timestamp": "10-06-2019 08:02:18", 

           "min": "12.5", 
           "min_timestamp": "03-06-2019 07:40:02", 

           "max": "32.84", 
           "max_timestamp": "03-06-2019 04:30:03"
      }}}

def get_keys(keys, d):
  if not keys:
    return d
  key = keys[0]
  return get_keys(keys[1:], d[key])

print(get_keys(('environmental', 'temprature', 'now'), dictionary_page_data_file))

不,字典不支持这一点,因为
元组
是一个有效的键,它将是不明确的,虽然您可以编写一个函数,将元组或字符串转换为一系列相关的索引操作:和一些类似的操作。但您可以创建一个新对象,并实现
\uu getitem\uuuuuuuu
\uuuuuu setitem\uuuuuuuu
方法来使用自定义键。这里有一个例子:非常感谢,不知道这到底是如何工作的,但似乎简单明了:-)一个问题,为什么要返回get_key(key[1]、d[key]),而不仅仅是get_key(key[1]、d[key])@WernerVenter你的意思是不返回?那么函数将永远不会返回任何结果。因为它也不会就地修改数据,所以不会发生任何事情。