Converting [key1,val1,key2,val2] Lists to Dictionaries in Python
In Python, it is common to encounter lists where each pair of elements maps to a key-value pair in a dictionary. To convert such lists to dictionaries, the most syntactically elegant approach is to utilize the built-in zip() function in conjunction with dictionary construction.
For instance, given a list a with alternating keys and values:
a = ['hello','world','1','2']
We can efficiently create a dictionary b where each key from a maps to its corresponding value as follows:
b = dict(zip(a[::2], a[1::2]))
Here, a[::2] extracts the even elements, representing keys, and a[1::2] extracts the odd elements, representing values. The dict() constructor then combines these lists into a dictionary.
For larger lists, a memory-efficient alternative is to leverage the itertools.izip() function, which iteratively consumes the elements from a in pairs:
from itertools import izip i = iter(a) b = dict(izip(i, i))
In Python 3, a similar result can be achieved using a dict comprehension along with range():
b = {a[i]: a[i+1] for i in range(0, len(a), 2)}
Alternatively, the zip() function can be used directly, as it has been lazy in Python 3:
i = iter(a) b = dict(zip(i, i))
For brevity, the "walrus" operator (:=) can be employed in Python 3.8 and later to perform assignment in a single line:
b = dict(zip(i := iter(a), i))
The above is the detailed content of How Can I Efficiently Convert a Python List of Alternating Keys and Values into a Dictionary?. For more information, please follow other related articles on the PHP Chinese website!