Converting a list of tuples into a dict

前端 未结 5 1156
走了就别回头了
走了就别回头了 2020-11-27 05:16

I have a list of tuples like this:

[
(\'a\', 1),
(\'a\', 2),
(\'a\', 3),
(\'b\', 1),
(\'b\', 2),
(\'c\', 1),
]

I want to iterate through th

相关标签:
5条回答
  • 2020-11-27 05:25

    Print list of tuples grouping by the first item

    This answer is based on the @gommen one.

    #!/usr/bin/env python
    
    from itertools import groupby
    from operator  import itemgetter
    
    L = [
    ('a', 1),
    ('a', 2),
    ('a', 3),
    ('b', 1),
    ('b', 2),
    ('c', 1),
    ]
    
    key = itemgetter(0)
    L.sort(key=key) #NOTE: use `L.sort()` if you'd like second items to be sorted too
    for k, group in groupby(L, key=key):
        print k, ' '.join(str(item[1]) for item in group)
    

    Output:

    a 1 2 3
    b 1 2
    c 1
    
    0 讨论(0)
  • 2020-11-27 05:27
    l = [
    ('a', 1),
    ('a', 2),
    ('a', 3),
    ('b', 1),
    ('b', 2),
    ('c', 1),
    ]
    
    d = {}
    for x, y in l:
        d.setdefault(x, []).append(y)
    print d
    

    produces:

    {'a': [1, 2, 3], 'c': [1], 'b': [1, 2]}
    
    0 讨论(0)
  • 2020-11-27 05:30

    I would just do the basic

    answer = {}
    for key, value in list_of_tuples:
      if key in answer:
        answer[key].append(value)
      else:
        answer[key] = [value]
    

    If it's this short, why use anything complicated. Of course if you don't mind using setdefault that's okay too.

    0 讨论(0)
  • 2020-11-27 05:41

    A solution using groupby

        >>> from itertools import groupby
        >>> l = [('a',1), ('a', 2),('a', 3),('b', 1),('b', 2),('c', 1),]
        >>> [(label, [v for l,v in value]) for (label, value) in groupby(l, lambda x:x[0])]
        [('a', [1, 2, 3]), ('b', [1, 2]), ('c', [1])]
    

    groupby(l, lambda x:x[0]) gives you an iterator that contains ['a', [('a', 1), ...], c, [('c', 1)], ...]

    0 讨论(0)
  • 2020-11-27 05:47

    Slightly simpler...

    >>> from collections import defaultdict
    >>> fq= defaultdict( list )
    >>> for n,v in myList:
            fq[n].append(v)
    
    >>> fq
    defaultdict(<type 'list'>, {'a': [1, 2, 3], 'c': [1], 'b': [1, 2]})
    
    0 讨论(0)
提交回复
热议问题