我正在尝试为我正在尝试编写处理不同IP地址的脚本创建字典。
我的问题是:
鉴于d1
和d2
,假设d1
和d2
将始终具有相同数量的key:pair项,
我该如何创建d3
?
d1 = {1:a, 2:b, 3:b, 4:c, 5:c}
d2 = {one:a, two:b, three:b, four:c, five:c}
d3 = {a:[{1:one}], b:[{2:two},{3:three}], c:[{4:four},{5:five}]}
您可以看到d3
包含的密钥与d1
和d2
中的值相同,而对于d3
中的每个密钥,其值为a列表,其中有更多带字符串的词典:对应于d1
和d2
中原始键的对值。
我一直试图创建d3
一段时间,但我似乎无法推断出如何做到这一点。非常感谢您的帮助!
答案 0 :(得分:1)
在给出答案之前的第一个提示:
reverse_d1 = {}
for k, v in d1.iteritems():
reverse_d1.set_default(v, []).append(k)
答案 1 :(得分:0)
全部,谢谢你的意见。对此,我真的非常感激。不幸的是,我意识到我目前提出问题的方式,它完全无效。 d2中的键对应于子网掩码,它们并非都是唯一的,因此我构建它的方式甚至不是有效的字典。
经过大量的讨论,我想出了一个有效的解决方案:
p = 0
sysNames = ['R3','R2','R1']
d1 = OrderedDict([('200.200.200.2','R3'),('200.200.200.1','R2'),('172.172.172.1','R2'),('172.172.172.100','R1'),('192.168.1.151','R1')])
oid1 = '1.3.6.1.2.1.4.20.1.3.200.200.200.2'
oid2 = '1.3.6.1.2.1.4.20.1.3.200.200.200.1'
oid3 = '1.3.6.1.2.1.4.20.1.3.172.172.172.1'
oid4 = '1.3.6.1.2.1.4.20.1.3.172.172.172.100'
oid5 = '1.3.6.1.2.1.4.20.1.3.192.168.1.151'
d2 = {oid1:'255.255.255.0',oid2:'255.255.255.0',oid3:'255.255.255.0',oid4:'255.255.255.0',oid5:'255.255.255.0'}
d1keys = list(d1.keys())
d1values = list(d1.values())
maskOid = '1.3.6.1.2.1.4.20.1.3.'
d3 = {}
for i in range(len(sysNames)):
ipMaskList = list()
numInterfaces = d1values.count(sysNames[i])
for dummy in range(numInterfaces):
ipMaskList.append({d1keys[p]:d2.get(maskOid+d1keys[p])})
p += 1
d3[sysNames[i]] = ipMaskList
通常情况下,我确信这是实现目标的极其低效和复杂的方式。我绝对不是一个优秀的程序员,当事情正确运行时我感到很高兴。
再次感谢你们的帮助,如果有人想发布更有效的解决方案,请随意:)