使用子字符串将 dict 转换为列表
Convert dict to lists by using substrings
我有以下命令:
dict = {
"HVAC_flex[1,1]": 8.0,
"HVAC_flex[1,2]": 15.0,
"HVAC_flex[2,1]": 0.0,
"HVAC_flex[2,2]": 0.0,
"DHW_flex[1,1]": 0.0,
"DHW_flex[1,2]": 2.0,
"DHW_flex[2,1]": 4.0,
"DHW_flex[2,2]": 17.0
}
而我想要生成的是如下两个列表:
HVAC_flex = [ 8.0, 15.0, 0.0, 0.0]
DHW_flex = [ 0.0, 2.0, 4.0, 17.0]
问题是维度是动态定义的,因此 dict
可能包含其他值。
我的想法是搜索子字符串,比如如果 HVAC_flex
包含在键中,然后将值放入此列表中,等等,但我可以找到一种巧妙的方法来实现这一点。有办法吗?
您不能创建那些“命名”列表 - 但是您可以使用列表理解来创建值列表:
d = {
"HVAC_flex[1,1]": 8.0,
"HVAC_flex[1,2]": 15.0,
"HVAC_flex[2,1]": 0.0,
"HVAC_flex[2,2]": 0.0,
"DHW_flex[1,1]": 0.0,
"DHW_flex[1,2]": 2.0,
"DHW_flex[2,1]": 4.0,
"DHW_flex[2,2]": 17.0
}
prefix = ["HVAC", "DHW"]
values = [ [v for key,v in d.items() if key.startswith(b)] for b in prefix ]
print(values)
输出:
[[8.0, 15.0, 0.0, 0.0], [0.0, 2.0, 4.0, 17.0]]
使用字典理解来创建另一个字典可能更有意义:
values = {b: [v for key,v in d.items() if key.startswith(b)] for b in prefix }
print(values)
保留关于前缀的信息:
{'HVAC': [8.0, 15.0, 0.0, 0.0], 'DHW': [0.0, 2.0, 4.0, 17.0]}
您可以检查键名是否包含HVAC
或DHW
。创建一个列表并将值附加到各自的列表中。
d = {
"HVAC_flex[1,1]": 8.0,
"HVAC_flex[1,2]": 15.0,
"HVAC_flex[2,1]": 0.0,
"HVAC_flex[2,2]": 0.0,
"DHW_flex[1,1]": 0.0,
"DHW_flex[1,2]": 2.0,
"DHW_flex[2,1]": 4.0,
"DHW_flex[2,2]": 17.0
}
HVAC_flex, DHW_flex = [], []
for k,v in d.items():
if "HVAC" in k:
HVAC_flex.append(v)
else:
DHW_flex.append(v)
print(HVAC_flex)
print(DHW_flex)
我正在使用 else
,因为您的字典中只有两个子字符串,但如果它们包含更多子字符串,请尝试获取方括号前的文本:
prefix = []
for k,v in d.items():
if k.split('[')[0] not in prefix: # this splits the string into part containing '[' by using [0] we get the string part.
prefix.append(k.split('[')[0])
else:
continue
输出:
[8.0, 15.0, 0.0, 0.0]
[0.0, 2.0, 4.0, 17.0]
我有以下命令:
dict = {
"HVAC_flex[1,1]": 8.0,
"HVAC_flex[1,2]": 15.0,
"HVAC_flex[2,1]": 0.0,
"HVAC_flex[2,2]": 0.0,
"DHW_flex[1,1]": 0.0,
"DHW_flex[1,2]": 2.0,
"DHW_flex[2,1]": 4.0,
"DHW_flex[2,2]": 17.0
}
而我想要生成的是如下两个列表:
HVAC_flex = [ 8.0, 15.0, 0.0, 0.0]
DHW_flex = [ 0.0, 2.0, 4.0, 17.0]
问题是维度是动态定义的,因此 dict
可能包含其他值。
我的想法是搜索子字符串,比如如果 HVAC_flex
包含在键中,然后将值放入此列表中,等等,但我可以找到一种巧妙的方法来实现这一点。有办法吗?
您不能创建那些“命名”列表 - 但是您可以使用列表理解来创建值列表:
d = {
"HVAC_flex[1,1]": 8.0,
"HVAC_flex[1,2]": 15.0,
"HVAC_flex[2,1]": 0.0,
"HVAC_flex[2,2]": 0.0,
"DHW_flex[1,1]": 0.0,
"DHW_flex[1,2]": 2.0,
"DHW_flex[2,1]": 4.0,
"DHW_flex[2,2]": 17.0
}
prefix = ["HVAC", "DHW"]
values = [ [v for key,v in d.items() if key.startswith(b)] for b in prefix ]
print(values)
输出:
[[8.0, 15.0, 0.0, 0.0], [0.0, 2.0, 4.0, 17.0]]
使用字典理解来创建另一个字典可能更有意义:
values = {b: [v for key,v in d.items() if key.startswith(b)] for b in prefix }
print(values)
保留关于前缀的信息:
{'HVAC': [8.0, 15.0, 0.0, 0.0], 'DHW': [0.0, 2.0, 4.0, 17.0]}
您可以检查键名是否包含HVAC
或DHW
。创建一个列表并将值附加到各自的列表中。
d = {
"HVAC_flex[1,1]": 8.0,
"HVAC_flex[1,2]": 15.0,
"HVAC_flex[2,1]": 0.0,
"HVAC_flex[2,2]": 0.0,
"DHW_flex[1,1]": 0.0,
"DHW_flex[1,2]": 2.0,
"DHW_flex[2,1]": 4.0,
"DHW_flex[2,2]": 17.0
}
HVAC_flex, DHW_flex = [], []
for k,v in d.items():
if "HVAC" in k:
HVAC_flex.append(v)
else:
DHW_flex.append(v)
print(HVAC_flex)
print(DHW_flex)
我正在使用 else
,因为您的字典中只有两个子字符串,但如果它们包含更多子字符串,请尝试获取方括号前的文本:
prefix = []
for k,v in d.items():
if k.split('[')[0] not in prefix: # this splits the string into part containing '[' by using [0] we get the string part.
prefix.append(k.split('[')[0])
else:
continue
输出:
[8.0, 15.0, 0.0, 0.0]
[0.0, 2.0, 4.0, 17.0]