Getting "ValueError: need more than 1 value to unpack" while trying to read a value from dictionary in python
MRAB
python at mrabarnett.plus.com
Thu Feb 15 13:59:06 EST 2018
On 2018-02-15 11:25, Chris Warrick wrote:
> On 15 February 2018 at 12:07, Sum J <sjsumitj at gmail.com> wrote:
>> Below is my code. Here I want to read the "ip address" from s
>>
>>
>> s= '''
>> Power On Enabled = On
>> State: connected
>> Radio Module: Unknown
>> noise: -097
>> signalStrength: -046
>> ip address: 192.168.75.147
>> subnet mask: 255.255.255.0
>> IPv4 address configured by DHCP
>> Mac Addr: ac:e2:d3:32:00:5a
>> Mode: infrastrastructure
>> ssid: Cloudlab
>> Channel: 1
>> Regulatory: World Safe
>> Authencation: WPA2/PSK
>> Encryption: AES or TKIP
>> '''
>>
>> s = s.replace("=",":")
>> # s = s.strip()
>> print s
>>
>> d = {}
>> for i in s:
>> key, val = i.split(":")
>> d[key] = val.strip()
>>
>> print d
>> print d["ip address"]
>>
>>
>> Getting below error :
>> <module> key, val = i.split(":")
>> ValueError: need more than 1 value to unpack
>> --
>> https://mail.python.org/mailman/listinfo/python-list
>
> If you iterate over a string, you are iterating over individual
> characters. Instead, you need to split it into lines, first stripping
> whitespace (starts and ends with an empty line).
>
> s = s.strip().replace("=",":")
> print s
>
> d = {}
I'd use .splitlines instead:
> for i in s.split('\n'):
> try:
.partition works better here. You should note that the "Mac Addr" line
has multiple colons, most of which are part of the value!
> key, val = i.split(":")
> d[key.strip()] = val.strip()
> except ValueError:
> print "no key:value pair found in", i
>
s = s.replace("=",":")
d = {}
for line in s.splitlines():
key, sep, val = line.partition(":")
if sep:
d[key.strip()] = val.strip()
else:
print "no key:value pair found in", line
>
> (PS. please switch to Python 3)
> +1
More information about the Python-list
mailing list