पाइथन में एक डिक्ट में टुपल्स की एक सूची परिवर्तित करना

मेरे पास इस तरह की tuples की एक सूची है:

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

मैं इस कुंजी के माध्यम से पहले आइटम द्वारा पुन: प्रयास करना चाहता हूं, उदाहरण के लिए मैं इस तरह कुछ प्रिंट कर सकता हूं:

a 1 2 3
b 1 2
c 1

मैं आइटम को ट्रैक करने के बिना ऐसा करने के बारे में कैसे जाउंगा कि पहला आइटम वही है जैसा कि मैं टुपल्स के चारों ओर लूप करता हूं। यह बदसूरत लगता है (प्लस मुझे सूची को शुरू करने के लिए सॉर्ट करना होगा) ...

धन्यवाद,

सज्जन

0

5 उत्तर

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

पैदा करता है:

{'a': [1, 2, 3], 'c': [1], 'b': [1, 2]}
0
जोड़ा

मैं सिर्फ बुनियादी ही करूंगा

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

यदि यह छोटा है, तो जटिल कुछ भी क्यों उपयोग करें। बेशक अगर आपको setdefault का उपयोग करने में कोई फर्क नहीं पड़ता है तो ठीक है।

0
जोड़ा

थोड़ा सा सरल ...

>>> from collections import defaultdict
>>> fq= defaultdict( list )
>>> for n,v in myList:
        fq[n].append(v)

>>> fq
defaultdict(, {'a': [1, 2, 3], 'c': [1], 'b': [1, 2]})
0
जोड़ा
@ ब्लेयर कॉनराड: नेड बचेचेल्डर का टाइप करना आसान था: उन्होंने मुझे कई मिनट तक पोस्ट में हरा दिया।
जोड़ा लेखक S.Lott, स्रोत
डिफ़ॉल्ट डिक्ट निश्चित रूप से इस पर जाने का तरीका है। वास्तव में, यदि आप दस्तावेज़ों में उदाहरण को देखते हैं तो यह उल्लेखनीय रूप से इस समस्या के समान है - docs.python.org/library/collections.html#defaultdict-example‌ s
जोड़ा लेखक Aaron Newton, स्रोत
Haha! टाइप करें, या संग्रह एपीआई देखें। धन्यवाद हालांकि, मैंने कुछ नया सीखा।
जोड़ा लेखक Ali Afshar, स्रोत
मेरा दृष्टिकोण नेड बचेचेल्डर के समान ही होगा लेकिन यह बहुत अच्छा है।
जोड़ा लेखक Blair Conrad, स्रोत
collections.defaultdict मेरे सभी समय के पसंदीदा वर्गों में से एक है। प्रश्नों का उत्तर लगभग "जैसे VLOOKUP ()" का उपयोग एक्सेल प्रश्नों का उत्तर है।
जोड़ा लेखक hughdbrown, स्रोत

पहली आइटम द्वारा समूहबद्ध समूहों की सूची मुद्रित करें

यह उत्तर @gommen पर आधारित है एक

#!/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)

आउटपुट:

a 1 2 3
b 1 2
c 1
0
जोड़ा

समूहby का उपयोग कर एक समाधान

    >>> 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])]

ग्रुपबी (एल, लैम्ब्डा एक्स: एक्स [0]) आपको एक इटरेटर देता है जिसमें ['ए', [('ए', 1), ...], सी, [('सी', 1)] शामिल है। ..]

0
जोड़ा
आपको शायद यह उल्लेख करना चाहिए कि इसके लिए आपको एक क्रमबद्ध सूची की आवश्यकता है (या समूहबी (सॉर्टेड (एल), ..) का उपयोग करने के लिए इसका उपयोग करें। दिया गया डेटा क्रमबद्ध दिखता है, लेकिन सवाल का उल्लेख है "(प्लस मुझे सूची को सॉर्ट करना होगा साथ शुरू करें) ... "तो मुझे यकीन नहीं है कि आप इस पर भरोसा कर सकते हैं।
जोड़ा लेखक Brian, स्रोत