If the string will always be formatted like '<string 1> : <key1>:<value1> <key2>:<value2>'
, then you can use this:
s = 'IP - internet : IPv4:225.138.42.248 IPv6:NA'
l = s.split(' : ')
s1 = l[0]
l = l[1].split(' ')
k1, v1 = l[0].split(':')
k2, v2 = l[1].split(':')
d = {
s1: {
k1: v1,
k2: v2,
}
}
print d
Output:
{'IP - internet': {'IPv4': '225.138.42.248', 'IPv6': 'NA'}}
Alternatively, you can use a regular expression:
s = 'IP - internet : IPv4:225.138.42.248 IPv6:NA'
import re
pattern = r'([^:]+) : ([^:]+):([^:]+) ([^:]+):([^:]+)'
r = re.search(pattern, s)
s1, k1, v1, k2, v2 = (r.group(i) for i in range(1, 6))
d = {
s1: {
k1: v1,
k2: v2,
}
}
print d
Output:
{'IP - internet': {'IPv4': '225.138.42.248', 'IPv6': 'NA'}}