以下嵌套詞典是我的字典:沒有硬編碼
'relay': ['S1=OFF,S2=OFF,S3=OFF,S4=OFF'],
我想的O/P爲例如:(像嵌套字典)
'relay': [['S1':'OFF'],['S2':'OFF'],['S3','OFF'],['S4':'OFF']]
的問題是,我不能硬編碼的關鍵和價值觀,它可能會在運行時改變。任何人都可以幫助我呢?
以下嵌套詞典是我的字典:沒有硬編碼
'relay': ['S1=OFF,S2=OFF,S3=OFF,S4=OFF'],
我想的O/P爲例如:(像嵌套字典)
'relay': [['S1':'OFF'],['S2':'OFF'],['S3','OFF'],['S4':'OFF']]
的問題是,我不能硬編碼的關鍵和價值觀,它可能會在運行時改變。任何人都可以幫助我呢?
一種可能的方法可以是這樣的:
不過,我想提出的假設是:
值是
dictified
(由於缺乏一個更好的名字)總是在['abc=def,abc=...']
形式
d = {'panel': ['STDSWB'], 'relay': ['S1=OFF,S2=OFF,S3=OFF,S4=OFF']}
from collections import defaultdict
def dictionary_maker(d, key):
# Makes new dict to add to previous dictionary
new_dict = defaultdict(dict)
# foreach value in the list
for v in d[key]:
for i in v.split(','):
d_new = i.split('=')
# populate new dict
new_dict[key][d_new[0]] = d_new[1]
# remove old key and add new key
d.pop(key, None)
d[key] = dict(new_dict[key])
return d
d = dictionary_maker(d, 'relay')
print (d)
# d = {'panel': ['STDSWB'], 'relay': {'S1': 'OFF', 'S2': 'OFF', 'S3': 'OFF', 'S4': 'OFF'}}
現在,你可以看看「S2」的值,例如通過執行類似:
print (d['relay']['S2']) #OFF
有沒有辦法做到這一點,但沒有硬編碼中繼。 – Erina
*編輯*併爲其製作了一個功能,因此您可以將它用於多個按鍵。希望這會有所幫助 – Ludisposed
但是在這一行中,我們將硬編碼轉換爲詞典權利。因此,如果我想要與其他詞典執行相同的操作,則這種方法無效。 d = dictionary_maker(d,'relay') – Erina
鑑於字符串是逗號隔開的鍵 - /值,其中鍵和值由等號分隔,可以使用嵌套字典解析:
d['relay'] = dict(v.split('=',1) for v in d['relay'][0].split(','))
這將產生:
>>> d = {'panel': ['STDSWB'], 'relay': ['S1=OFF,S2=OFF,S3=OFF,S4=OFF']}
>>> d['relay'] = dict(v.split('=',1) for v in d['relay'][0].split(','))
>>> d
{'relay': {'S2': 'OFF', 'S4': 'OFF', 'S1': 'OFF', 'S3': 'OFF'}, 'panel': ['STDSWB']}
@geetha:'d'應該是原來的字典。您可以用變量的名稱替換它。 –
@geetha:你可以發佈你的原始字典(或最小版本)與錯誤。 –
以下是我原來的dic {'panel':['STDSWB'], 'relay':['S1 = OFF,S2 = OFF,S3 = OFF,S4 = OFF']}。我想製作一個嵌套詞典 – Erina
你想要的值是一個列表的列表?或者是一個字典列表?因爲當前字典是* not *語法有效。 –
在你想要的輸出中。這是一個'列表',也不是'字典' – Ludisposed
我想要o/p作爲字典 – Erina