python中的列表重复数据连接
我是python的新手,在获取这个输出时面临着问题python中的列表重复数据连接,python,list,python-2.7,Python,List,Python 2.7,我是python的新手,在获取这个输出时面临着问题 a = [('textVerify', 'AH', 'SELECT SERVICES'), ('textVerify', 'F7', 'test1>'),('audioVerify', '091;0'), ('imageVerify', 'duck.gif'),('imageVerify', 'egg.gif')] 我想创建一个新列表,它应该包含所有第0个唯一元素,如 audioVerify,imageVerify,textVer
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')]
对此,您最好使用一个:
>>> 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',)]})
如果需要保留字典键的顺序,可以使用,以及Ashwini Chaudhary所述的.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',)])])
对此,您最好使用一个:
>>> 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',)]})
如果需要保留字典键的顺序,可以使用,以及Ashwini Chaudhary所述的.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',)])])
使用
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',)]
使用
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',)]
这不是一个合适的数据结构。字典会更有意义,尤其是defaultdict。这不是一个合适的数据结构。字典会更有意义,尤其是defaultdict。虽然
dict.setdefault()
比defauldict()
快一些。关于如何使用字典来保持字典条目的顺序:@Ragav:如果顺序相关,可以使用OrderedDict
。我已经编辑了我的答案。@TimPietzcker:也做了同样的:)虽然dict.setdefault()
比defauldict()
快一些。关于如何保持dict条目的顺序:@Ragav:如果顺序相关,可以使用orderedict
。我已经编辑了我的答案。@TimPietzcker:我也这么做了:)