我有以下形式的資料:
{None: {'VPP_users': {None: [1, 2, 3, 4]}, 'timesteps': {None: [1, 2]}, 'DR_signal': {None: 180.0}, 'power_contract': {(1, 1): 25, (2, 1): 78, (3, 1): 95, (4, 1): 9, (1, 2): 91, (2, 2): 62, (3, 2): 92, (4, 2): 52}, 'HVAC_flex_available': {(1, 1): 5, (2, 1): 24, (3, 1): 28, (4, 1): 9, (1, 2): 14, (2, 2): 25, (3, 2): 10, (4, 2): 50}, 'DHW_flex_available': {(1, 1): 46, (2, 1): 27, (3, 1): 27, (4, 1): 6, (1, 2): 10, (2, 2): 10, (3, 2): 27, (4, 2): 22}}}
我需要以某種方式以以下形式修改上述表格:
{'HVAC_flex_available': [5, 24, 28, 9, 14, 25, 10, 50], 'DHW_flex_available': [46, 27, 27, 6, 10, 10, 27, 22]}
具體來說,我想獲取變數HVAC_flex_available并DHW_flex_available保留索引之后的數字(1,1),(2,1)等等。
知道如何實作它嗎?
編輯:到目前為止我嘗試過的是:
prefix = ["HVAC_flex_available", "DHW_flex_Avaliable"]
output = {b: [v for key,v in solution.items() if key.startswith(b)] for b in prefix
但我得到:
AttributeError: 'NoneType' object has no attribute 'startswith'
uj5u.com熱心網友回復:
考慮到此輸入字典的確切格式,您可以通過字典理解來實作這一點:
d = {None: {'VPP_users': {None: [1, 2, 3, 4]}, 'timesteps': {None: [1, 2]}, 'DR_signal': {None: 180.0}, 'power_contract': {(1, 1): 25, (2, 1): 78, (3, 1): 95, (4, 1): 9, (1, 2): 91, (2, 2): 62, (3, 2): 92, (4, 2): 52}, 'HVAC_flex_available': {(1, 1): 5, (2, 1): 24, (3, 1): 28, (4, 1): 9, (1, 2): 14, (2, 2): 25, (3, 2): 10, (4, 2): 50}, 'DHW_flex_available': {(1, 1): 46, (2, 1): 27, (3, 1): 27, (4, 1): 6, (1, 2): 10, (2, 2): 10, (3, 2): 27, (4, 2): 22}}}
d2 = {key:[v for v in d[None][key].values()] for key in ['HVAC_flex_available', 'DHW_flex_available']}
# Output
{'HVAC_flex_available': [5, 24, 28, 9, 14, 25, 10, 50], 'DHW_flex_available': [46, 27, 27, 6, 10, 10, 27, 22]}
uj5u.com熱心網友回復:
您要查找的字典將在data_new.
data = {None: {'VPP_users': {None: [1, 2, 3, 4]}, 'timesteps': {None: [1, 2]}, 'DR_signal': {None: 180.0}, 'power_contract': {(1, 1): 25, (2, 1): 78, (3, 1): 95, (4, 1): 9, (1, 2): 91, (2, 2): 62, (3, 2): 92, (4, 2): 52}, 'HVAC_flex_available': {(1, 1): 5, (2, 1): 24, (3, 1): 28, (4, 1): 9, (1, 2): 14, (2, 2): 25, (3, 2): 10, (4, 2): 50}, 'DHW_flex_available': {(1, 1): 46, (2, 1): 27, (3, 1): 27, (4, 1): 6, (1, 2): 10, (2, 2): 10, (3, 2): 27, (4, 2): 22}}}
data_new = {
'HVAC_flex_available' : [v for k,v in data[None]['HVAC_flex_available'].items()],
'DHW_flex_available' : [v for k,v in data[None]['DHW_flex_available'].items()]
}
uj5u.com熱心網友回復:
一個相當簡單的字典理解應該做到這一點:
d_in = {None: {'VPP_users': {None: [1, 2, 3, 4]}, 'timesteps': {None: [1, 2]}, 'DR_signal': {None: 180.0}, 'power_contract': {(1, 1): 25, (2, 1): 78, (3, 1): 95, (4, 1): 9, (1, 2): 91, (2, 2): 62, (3, 2): 92, (4, 2): 52}, 'HVAC_flex_available': {(1, 1): 5, (2, 1): 24, (3, 1): 28, (4, 1): 9, (1, 2): 14, (2, 2): 25, (3, 2): 10, (4, 2): 50}, 'DHW_flex_available': {(1, 1): 46, (2, 1): 27, (3, 1): 27, (4, 1): 6, (1, 2): 10, (2, 2): 10, (3, 2): 27, (4, 2): 22}}}
d_out = {key: list(d_in[None][key].values()) for key in ('HVAC_flex_available', 'DHW_flex_available')}
print(d_out)
輸出:
{'HVAC_flex_available': [5, 24, 28, 9, 14, 25, 10, 50], 'DHW_flex_available': [46, 27, 27, 6, 10, 10, 27, 22]}
uj5u.com熱心網友回復:
之前的回復已經提到字典理解,但這里有一點不同的方法。
我確保包含了Wanted_keys變數,以便您可以輕松地修改您想要獲取的密鑰。
將您的字典分配給your_dict變數應該可以解決問題。
# Creating a tuple consists of keys which we would like to fetch data from
wanted_keys = ('HVAC_flex_available', 'DHW_flex_available',)
# For each key in wanted keys, the key and values of the nested key are stored in a dictionary
output_dict = {k: list(your_dict.get(None, {}).get(k, {}).values()) for k in wanted_keys}
uj5u.com熱心網友回復:
你可以嘗試這樣的事情。在下面的代碼中 d1 是 dict 變數,即
d1 = {None: {'VPP_users': {None: [1, 2, 3, 4]}, 'timesteps': {None: [1, 2]}, 'DR_signal': {None: 180.0}, 'power_contract': {(1, 1): 25, (2, 1): 78, (3, 1): 95, (4, 1): 9, (1, 2): 91, (2, 2): 62, (3, 2): 92, (4, 2): 52}, 'HVAC_flex_available': {(1, 1): 5, (2, 1): 24, (3, 1): 28, (4, 1): 9, (1, 2): 14, (2, 2): 25, (3, 2): 10, (4, 2): 50}, 'DHW_flex_available': {(1, 1): 46, (2, 1): 27, (3, 1): 27, (4, 1): 6, (1, 2): 10, (2, 2): 10, (3, 2): 27, (4, 2): 22}}}
d = d1[None]
v1 = None
v2 = None
for key in d:
if key == 'HVAC_flex_available':
v1 = [item for item in d[key].values()]
if key == 'DHW_flex_available':
v2 = [item for item in d[key].values()]
result = {
'HVAC_flex_available': v1,
'DHW_flex_available': v2
}
print(result)
結果
{'HVAC_flex_available': [5, 24, 28, 9, 14, 25, 10, 50], 'DHW_flex_available': [46, 27, 27, 6, 10, 10, 27, 22]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/472717.html
上一篇:pythonbeautifulsoup如何獲取json格式的資料?
下一篇:從數字串列創建串列串列
