【发布时间】:2017-07-22 16:05:33
【问题描述】:
我有一个如下的输入文件,我可以从中构建我的字典
一般格式
<IP_1>
KEY_1=VALUE_1
KEY_2=VALUE_2
<IP_2>
KEY_1=VALUE_1
KEY_2=VALUE_2
例子
192.168.1.1
USER_NAME=admin
PASSWORD=admin123
192.168.1.2
USER_NAME=user
PASSWORD=user123
预期的字典应该是这样的:
>>print dictionary_of_ip
{'192.168.1.1':{'USER_NAME'='admin','PASSWORD'='admin123'},
'192.168.1.2':{'USER_NAME'='user','PASSWORD'='user123'}}
本质上是字典中的字典
下面是我的代码:
def generate_key_value_pair(filePath, sep='='):
dict_of_ip = {}
slave_properties = {}
with open(filePath, "rt") as f:
for line in f:
stripped_line = line.strip()
if stripped_line and stripped_line[0].isdigit():
#print 'Found Ip'
ip = stripped_line
dict_of_ip[ip] = ''
elif stripped_line and stripped_line[0].isupper():
#print "Found attributes")
key_value = stripped_line.split(sep)
key = key_value[0].strip()
value = key_value[1].strip()
slave_properties[key] = value
dict_of_ip[ip] = slave_properties
return dict_of_ip
我能够按预期获取第一个 IP 及其属性,但是来自第二个 IP 的第二组值覆盖了第一个。
>>print dict_of_ip
{'192.168.1.1': {'USER_NAME': 'user', 'PASSWORD': 'user123'},
'192.168.1.2': {'USER_NAME': 'user', 'PASSWORD': 'user123'}}
dict_of_ip[ip] = slave_properties 导致覆盖。如何防止 '192.168.1.2' 键中的值覆盖第一个?
【问题讨论】:
-
if ip not in dict_of_ip: dict_of_ip[ip] = slave_properties应该这样做... -
多字典不是更容易吗?
-
提示:变量
slave_properties在其生命周期内引用了多少个不同的字典? -
所以你说:如果密钥已经存在,那么不要更新它,只创建。查看我的评论,只需测试字典中已有的键...
标签: python dictionary