Create or append to a list in a dictionary - can this be shortened?

后端 未结 3 1623
忘掉有多难
忘掉有多难 2021-01-30 16:11

Can this Python code be shortened and still be readable using itertools and sets?

result = {}
for widget_type, app in widgets:
    if widget_type not in result:
         


        
相关标签:
3条回答
  • 2021-01-30 16:22

    You can use a defaultdict(list).

    from collections import defaultdict
    
    result = defaultdict(list)
    for widget_type, app in widgets:
        result[widget_type].append(app)
    
    0 讨论(0)
  • 2021-01-30 16:35

    An alternative to defaultdict is to use the setdefault method of standard dictionaries:

     result = {}
     for widget_type, app in widgets:
         result.setdefault(widget_type, []).append(app)
    

    This relies on the fact that lists are mutable, so what is returned from setdefault is the same list as the one in the dictionary, therefore you can append to it.

    0 讨论(0)
  • 2021-01-30 16:36

    may be a bit slow but works

    result = {}
    for widget_type, app in widgets:
        result[widget_type] = result.get(widget_type, []) + [app]
    
    0 讨论(0)
提交回复
热议问题