Python 如何使用元组作为字典键集
我将JSON文件解析为字典,下面是JSON数据示例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
"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你的意思是不返回?那么函数将永远不会返回任何结果。因为它也不会就地修改数据,所以不会发生任何事情。