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