在python中列出重复数据连接

2024-05-14 08:16:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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')]

Tags: 元素列表egggifselecttest1duck新手
3条回答

你最好用^{}来表示:

>>> 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'

如果需要保留字典键的顺序,可以使用^{}.setdefault()方法,如Ashwini Chaudhary所述:

>>> 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',)])])
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> _ = [d[i[0]].append(i[1:]) for i in a]
>>> d['textVerify']
[('AH', 'SELECT SERVICES'), ('F7', 'test1>')]

使用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',)]

相关问题 更多 >

    热门问题