如何用重复元素划分列表

2024-10-03 02:47:11 发布

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

如何通过重复元素“model”滑动列表

list1=[{u'model': (u'AAAA', '')}, {u'des': (u'xx', '')}, {u'select': (u'1331', u'1')}, {u'select': (u'1332', u'2')}, {u'derived': (u'3444', u'2')}, {u'derived': (u'3445', u'1')}, {u'end': ('', '')}, {u'model': (u'BBBB', '')}, {u'des': (u'yy', '')}, {u'select': (u'1331', u'1')}, {u'select': (u'1332', u'2')}, {u'derived': (u'3444', u'2')}, {u'derived': (u'3445', u'1')}, {u'end': ('', '')}
for i, dictElem in enumerate (list1):
    print i, dictElem

0 {u'model': (u'AAAA', '')}
1 {u'des': (u'xx', '')}
2 {u'select': (u'1331', u'1')}
3 {u'select': (u'1332', u'2')}
4 {u'derived': (u'3444', u'2')}
5 {u'derived': (u'3445', u'1')}
6 {u'end': ('', '')}
7 {u'model': (u'BBBB', '')}
8 {u'des': (u'yy', '')}
9 {u'select': (u'1331', u'1')}
10 {u'select': (u'1332', u'2')}
11 {u'derived': (u'3444', u'2')}
12 {u'derived': (u'3445', u'1')}
13 {u'end': ('', '')}

我想得到一个新的列表1,如下所示:

newlist1=[
[{u'model': (u'AAAA', '')}, {u'des': (u'xx', '')}, {u'select': (u'1331', u'1')}, {u'select': (u'1332', u'2')}, {u'derived': (u'3444', u'2')}, {u'derived': (u'3445', u'1')}, {u'end': ('', '')}], 
[ {u'model': (u'BBBB', '')}, {u'des': (u'yy', '')}, {u'select': (u'1331', u'1')}, {u'select': (u'1332', u'2')}, {u'derived': (u'3444', u'2')}, {u'derived': (u'3445', u'1')}, {u'end': ('', '')}]
]

“model”“end”的元素将成为新元素


Tags: in元素列表formodelselectendxx
3条回答

稍微短一点

def reductor(acc, item):
    if 'model' in item:
        acc.append([])
    acc[-1].append( item )
    return acc

listoflists = reduce(reductor, list1, [])

list1作为

list1=[{u'model': (u'AAAA', '')}, ..., {u'end': ('', '')}, {u'model': (u'BBBB', '')}, ...]

for l in listoflists:
    print "Found new list:\n",l

输出:

Found new list:
[{u'model': (u'AAAA', '')}, {u'des': (u'xx', '')}, {u'select': (u'1331', u'1')}, {u'select': (u'1332', u'2')}, {u'derived': (u'3444', u'2')}, {u'derived': (u'3445', u'1')}, {u'end': ('', '')}]
Found new list:
[{u'model': (u'BBBB', '')}, {u'des': (u'yy', '')}, {u'select': (u'1331', u'1')}, {u'select': (u'1332', u'2')}, {u'derived': (u'3444', u'2')}, {u'derived': (u'3445', u'1')}, {u'end': ('', '')}]

这个可以,我用你的单子测试过了。 这有点混乱,但是dict/列表的混合有时会很混乱

dicts = []
list1=[{u'model': (u'AAAA', '')}, {u'des': (u'xx', '')}, {u'select': (u'1331', u'1')}, {u'select': (u'1332', u'2')}, {u'derived': (u'3444', u'2')}, {u'derived': (u'3445', u'1')}, {u'end': ('', '')}, {u'model': (u'BBBB', '')}, {u'des': (u'yy', '')}, {u'select': (u'1331', u'1')}, {u'select': (u'1332', u'2')}, {u'derived': (u'3444', u'2')}, {u'derived': (u'3445', u'1')}, {u'end': ('', '')}]

index = -1
for dict in list1:
    for key, value in (dict.iteritems():
        if key == u'model':
            index += 1
            dicts.append([])
        dicts[index].append({})
        dicts[index][len(dicts[index])-1][key] = value

for dict in dicts:
    print(dict)

编辑: 当您遍历这个列表时,您将得到每个索引处的dict。每次dict的键是u'model'时,您创建一个新列表,并将这个词汇表和下一个词汇表存储在新列表中。不需要“结束”。你知道吗

这里有一个简单的方法。它依赖于sentinel“end”字典的存在,例如{u'end': ('', '')},这似乎是对所示数据的有效假设。你知道吗

list1 = [{u'model': (u'AAAA', '')},
         {u'des': (u'xx', '')},
         {u'select': (u'1331', u'1')},
         {u'select': (u'1332', u'2')},
         {u'derived': (u'3444', u'2')},
         {u'derived': (u'3445', u'1')},
         {u'end': ('', '')},
         {u'model': (u'BBBB', '')},
         {u'des': (u'yy', '')},
         {u'select': (u'1331', u'1')},
         {u'select': (u'1332', u'2')},
         {u'derived': (u'3444', u'2')},
         {u'derived': (u'3445', u'1')},
         {u'end': ('', '')}]

start = 0
newlist1 = []
for i, d in enumerate(list1):
    if 'model' in d:
        start = i
    elif 'end' in d:
        newlist1.append(list1[start:i+1])

>>> from pprint import pprint
>>> pprint(newlist1)
[[{u'model': (u'AAAA', '')},
  {u'des': (u'xx', '')},
  {u'select': (u'1331', u'1')},
  {u'select': (u'1332', u'2')},
  {u'derived': (u'3444', u'2')},
  {u'derived': (u'3445', u'1')},
  {u'end': ('', '')}],
 [{u'model': (u'BBBB', '')},
  {u'des': (u'yy', '')},
  {u'select': (u'1331', u'1')},
  {u'select': (u'1332', u'2')},
  {u'derived': (u'3444', u'2')},
  {u'derived': (u'3445', u'1')},
  {u'end': ('', '')}]]

相关问题 更多 >