On 2015-06-11 11:10, David Aldrich wrote:
HiI am fairly new to Python. I am writing some code that uses a dictionary to store definitions of hardware registers. Here is a small part of it: import sys register = { 'address' : 0x3001c, 'fields' : { 'FieldA' : { 'range' : (31,20), }, 'FieldB' : { 'range' : (19,16), }, }, 'width' : 32 }; def main(): fields = register['fields'] for field, range_dir in fields: <== This line fails range_dir = field['range'] x,y = range_dir['range'] print(x, y) if __name__ == '__main__': main() I want the code to print the range of bits of each field defined in the dictionary. The output is: Traceback (most recent call last): File "testdir.py", line 32, in <module> main() File "testdir.py", line 26, in main for field, range_dir in fields: ValueError: too many values to unpack (expected 2) Please will someone explain what I am doing wrong?
You're iterating over the keys. What you want is to iterate over "fields.items()" which gives the key/value pairs.
Also I would like to ask how I could print the ranges in the order they are defined. Should I use a different dictionary class or could I add a field to the dictionary/list to achieve this?
Dicts are unordered. Try 'OrderedDict' from the 'collections' module. -- https://mail.python.org/mailman/listinfo/python-list
