Dictionary Comprehension in Python 3

前端 未结 3 730
一生所求
一生所求 2020-12-05 13:25

I found the following stack overflow post about dict comprehensions in Python2.7 and Python 3+: Create a dictionary with list comprehension in Pyth

相关标签:
3条回答
  • 2020-12-05 13:38

    Dictionary comprehension means generating items in the dictionary by some logic:

    x = {p: p*p for p in range(10)}
    
    print(x)
    
    y = {q: q*3 for q in range(5,15) if q%2!=0}
    
    print(y)
    
    0 讨论(0)
  • 2020-12-05 13:42

    Looping over a dictionary only yields the keys. Use d.items() to loop over both keys and values:

    {key: value for key, value in d.items()}
    

    The ValueError exception you see is not a dict comprehension problem, nor is it limited to Python 3; you'd see the same problem in Python 2 or with a regular for loop:

    >>> d = {'a':1, 'b':2, 'c':3, 'd':4}
    >>> for key, value in d:
    ...     print key, value
    ... 
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: need more than 1 value to unpack
    

    because each iteration there is only one item being yielded.

    Without a transformation, {k: v for k, v in d.items()} is just a verbose and costly d.copy(); use a dict comprehension only when you do a little more with the keys or values, or use conditions or a more complex loop construct.

    0 讨论(0)
  • 2020-12-05 13:52

    Well said above - you can drop items in Python3 if you do it this way:

    {key: d[key] for key in d}

    d = {'a':1, 'b':2, 'c':3, 'd':4}
    z = {x: d[x] for x in d}
    z
    >>>{'a': 1, 'b': 2, 'c': 3, 'd': 4}
    

    and this provides for the ability to use conditions as well

    y = {x: d[x] for x in d if d[x] > 1}
    y
    >>>{'b': 2, 'c': 3, 'd': 4}
    

    Enjoy!

    0 讨论(0)
提交回复
热议问题