以下嵌套词典是我的字典:没有硬编码
'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