1

私はPythonの初心者であり、この出力を取得する際に問題に直面しています

 a = [('textVerify', 'AH', 'SELECT SERVICES'), ('textVerify', 'F7', 'test1>'),('audioVerify', '091;0'), ('imageVerify', 'duck.gif'),('imageVerify', 'egg.gif')]

次のような0番目の一意の要素をすべて保持する新しいリストを作成したい

  audioVerify,imageVerify,textVerify

したがって、期待される結果は

 ['textVerify',(('AH', 'SELECT SERVICES'), ('F7', 'test1>'))  'audioVerify', ('091;0'),  ('imageVerify', ('duck.gif','egg.gif')]
4

4 に答える 4

5

defaultdictこれにはを使用することをお勧めします。

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for item in a:
...     d[item[0]].append(item[1:])
...
>>> d
defaultdict(<class 'list'>, {'textVerify': [('AH', 'SELECT SERVICES'), 
('F7', 'est1>')], 'imageVerify': [('duck.gif',), ('egg.gif',)], 
'audioVerify': [('091;0',)]})

これで、名前/インデックスでその要素にアクセスできます。

>>> d['textVerify']
[('AH', 'SELECT SERVICES'), ('F7', 'test1>')]
>>> d['textVerify'][0][0]
'AH'

辞書キーの順序を保持する必要がある場合は、Ashwini Chaudharyによって説明されているようにOrderedDict、メソッドと一緒にを使用できます。.setdefault()

>>> d = OrderedDict()
>>> for x in a:
...     d.setdefault(x[0],[]).append(x[1:])
...
>>> d
OrderedDict([('textVerify', [('AH', 'SELECT SERVICES'), ('F7', 'test1>')]), 
('audioVerify', [('091;0',)]), ('imageVerify', [('duck.gif',), ('egg.gif',)])])
于 2012-11-04T13:24:33.890 に答える
2

を使用すると、これは少なくとも小さなリストのdict.setdefault()場合よりもわずかに高速です。defaultdict()

>>> a
[('textVerify', 'AH', 'SELECT SERVICES'), ('textVerify', 'F7', 'test1>'), ('audioVerify', '091;0'), ('imageVerify', 'duck.gif'), ('imageVerify', 'egg.gif')]
>>> d={}
>>> for x in a:
...     d.setdefault(x[0],[]).append(x[1:])
... 
>>> d
{'audioVerify': [('091;0',)], 'textVerify': [('AH', 'SELECT SERVICES'), ('F7', 'test1>')], 'imageVerify': [('duck.gif',), ('egg.gif',)]}

>>> d["audioVerify"]
[('091;0',)]
于 2012-11-04T13:28:37.393 に答える
0
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> _ = [d[i[0]].append(i[1:]) for i in a]
>>> d['textVerify']
[('AH', 'SELECT SERVICES'), ('F7', 'test1>')]
于 2012-11-04T13:26:45.507 に答える
0
a = [('textVerify', 'AH', 'SELECT SERVICES'), ('textVerify', 'F7', 'test1>'),('audioVerify', '091;0'), ('imageVerify', 'duck.gif'),('imageVerify', 'egg.gif')]

c=set(i[0] for i in a)
d=dict()
for i in c:
        m=[]
        for v in a:
                if v[0]==i:
                        m.extend(list(v[1:]))
        if len(m) !=0:
                d[i]=m

print(d)
于 2012-11-04T16:48:10.337 に答える