将值添加到元组列表列表,最后转换为元组列表

时间:2018-02-07 10:12:35

标签: python arrays list tuples

我想为列表列表中的每个元组添加唯一值。该列表如下所示:

    [[('While', 'IN', 'Entity'),
  ('applying', 'VBG', 'O'),
  ('opacity', 'NN', 'Entity'),
  ('to', 'TO', 'Entity'),
  ('a', 'DT', 'Entity'),
  ('form', 'NN', 'Entity'),
  ('should', 'MD', 'O'),
  ('we', 'PRP', 'O'),
  ('use', 'VB', 'Entity'),
  ('a', 'DT', 'Entity'),
  ('decimal', 'NN', 'Entity'),
  ('or', 'CC', 'Entity'),
  ('double', 'JJ', 'Entity'),
  ('value', 'NN', 'Entity'),
  ('?', '.', 'O')],
 [('I', 'PRP', 'O'),
  ('want', 'VBP', 'O'),
  ('to', 'TO', 'Entity'),
  ('use', 'VB', 'Entity'),
  ('a', 'DT', 'Entity'),
  ('trackbar', 'NN', 'O'),
  ('to', 'TO', 'Entity'),
  ('change', 'VB', 'Entity'),
  ('a', 'DT', 'Entity'),
  ('forms', 'JJ', 'Entity'),
  ('opacity', 'NN', 'Entity'),
  ('.', '.', 'O')]]

我试图得到以下输出:

c = [(1, 'While', 'IN', 'Entity'),
  (1, 'applying', 'VBG', 'O'),
  (1, 'opacity', 'NN', 'Entity'),
  (1, 'to', 'TO', 'Entity'),
  (1, 'a', 'DT', 'Entity'),
  (1, 'form', 'NN', 'Entity'),
  (1, 'should', 'MD', 'O'),
  (1, 'we', 'PRP', 'O'),
  (1, 'use', 'VB', 'Entity'),
  (1, 'a', 'DT', 'Entity'),
  (1, 'decimal', 'NN', 'Entity'),
  (1, 'or', 'CC', 'Entity'),
  (1, 'double', 'JJ', 'Entity'),
  (1, 'value', 'NN', 'Entity'),
  (1, '?', '.', 'O'),
  (2, 'I', 'PRP', 'O'),
  (2, 'want', 'VBP', 'O'),
  (2, 'to', 'TO', 'Entity'),
  (2, 'use', 'VB', 'Entity'),
  (2, 'a', 'DT', 'Entity'),
  (2, 'trackbar', 'NN', 'O'),
  (2, 'to', 'TO', 'Entity'),
  (2, 'change', 'VB', 'Entity'),
  (2, 'a', 'DT', 'Entity'),
  (2, 'forms', 'JJ', 'Entity'),
  (2, 'opacity', 'NN', 'Entity'),
  (2, '.', '.', 'O')]

每个列表都应该发生数字增量(对于属于列表的元组,数字应该保持相同),并且应该最终输出为上面的元组列表。

通过这样做,我将能够实现以下目标:

pd.DataFrame.from_records(c, columns = ['a','b','c','d']) 


    a   b        c  d
0   1   While   IN  Entity
1   1   applying    VBG O
2   1   opacity NN  Entity
3   1   to  TO  Entity
4   1   a   DT  Entity
5   1   form    NN  Entity
6   1   should  MD  O
7   1   we  PRP O
8   1   use VB  Entity
9   1   a   DT  Entity
10  1   decimal NN  Entity
11  1   or  CC  Entity
12  1   double  JJ  Entity
13  1   value   NN  Entity
14  1   ?   .   O
15  2   I   PRP O
16  2   want    VBP O
17  2   to  TO  Entity
18  2   use VB  Entity
19  2   a   DT  Entity
20  2   trackbar    NN  O
21  2   to  TO  Entity
22  2   change  VB  Entity
23  2   a   DT  Entity
24  2   forms   JJ  Entity
25  2   opacity NN  Entity
26  2   .   .   O

我正在尝试使用list-zip函数:

list(zip(range(len(a)),a))

给了我以下结果:

[(0,
  [('While', 'IN', 'Entity'),
   ('applying', 'VBG', 'O'),
   ('opacity', 'NN', 'Entity'),
   ('to', 'TO', 'Entity'),
   ('a', 'DT', 'Entity'),
   ('form', 'NN', 'Entity'),
   ('should', 'MD', 'O'),
   ('we', 'PRP', 'O'),
   ('use', 'VB', 'Entity'),
   ('a', 'DT', 'Entity'),
   ('decimal', 'NN', 'Entity'),
   ('or', 'CC', 'Entity'),
   ('double', 'JJ', 'Entity'),
   ('value', 'NN', 'Entity'),
   ('?', '.', 'O')]),
 (1,
  [('I', 'PRP', 'O'),
   ('want', 'VBP', 'O'),
   ('to', 'TO', 'Entity'),
   ('use', 'VB', 'Entity'),
   ('a', 'DT', 'Entity'),
   ('trackbar', 'NN', 'O'),
   ('to', 'TO', 'Entity'),
   ('change', 'VB', 'Entity'),
   ('a', 'DT', 'Entity'),
   ('forms', 'JJ', 'Entity'),
   ('opacity', 'NN', 'Entity'),
   ('.', '.', 'O')])]

但无法继续采用这种方法。

3 个答案:

答案 0 :(得分:1)

使用for循环和 enumerate method ,您可以迭代元组列表并获得所需的输出。

<强>实施例

a =  [[('While', 'IN', 'Entity'),
  ('applying', 'VBG', 'O'),
  ('opacity', 'NN', 'Entity'),
  ('to', 'TO', 'Entity'),
  ('a', 'DT', 'Entity'),
  ('form', 'NN', 'Entity'),
  ('should', 'MD', 'O'),
  ('we', 'PRP', 'O'),
  ('use', 'VB', 'Entity'),
  ('a', 'DT', 'Entity'),
  ('decimal', 'NN', 'Entity'),
  ('or', 'CC', 'Entity'),
  ('double', 'JJ', 'Entity'),
  ('value', 'NN', 'Entity'),
  ('?', '.', 'O')],
 [('I', 'PRP', 'O'),
  ('want', 'VBP', 'O'),
  ('to', 'TO', 'Entity'),
  ('use', 'VB', 'Entity'),
  ('a', 'DT', 'Entity'),
  ('trackbar', 'NN', 'O'),
  ('to', 'TO', 'Entity'),
  ('change', 'VB', 'Entity'),
  ('a', 'DT', 'Entity'),
  ('forms', 'JJ', 'Entity'),
  ('opacity', 'NN', 'Entity'),
  ('.', '.', 'O')]]

res = []
for i, v in enumerate(a):
    for j in v:
        res.append(tuple([i+1] + list(j)))

print res

<强>输出:

[(1, 'While', 'IN', 'Entity'), (1, 'applying', 'VBG', 'O'), (1, 'opacity', 'NN', 'Entity'), (1, 'to', 'TO', 'Entity'), (1, 'a', 'DT', 'Entity'), (1, 'form', 'NN', 'Entity'), (1, 'should', 'MD', 'O'), (1, 'we', 'PRP', 'O'), (1, 'use', 'VB', 'Entity'), (1, 'a', 'DT', 'Entity'), (1, 'decimal', 'NN', 'Entity'), (1, 'or', 'CC', 'Entity'), (1, 'double', 'JJ', 'Entity'), (1, 'value', 'NN', 'Entity'), (1, '?', '.', 'O'), (2, 'I', 'PRP', 'O'), (2, 'want', 'VBP', 'O'), (2, 'to', 'TO', 'Entity'), (2, 'use', 'VB', 'Entity'), (2, 'a', 'DT', 'Entity'), (2, 'trackbar', 'NN', 'O'), (2, 'to', 'TO', 'Entity'), (2, 'change', 'VB', 'Entity'), (2, 'a', 'DT', 'Entity'), (2, 'forms', 'JJ', 'Entity'), (2, 'opacity', 'NN', 'Entity'), (2, '.', '.', 'O')]

答案 1 :(得分:1)

首先,你不能更改元组,你只能创建新元素。

您应该遍历现有列表,创建带有索引的新元组,并将旧数据附加到新列表中。

result = []
for index, inner_list in enumerate(lst, 1):
    for inner_tuple in inner_list:
        result.append((index, *inner_tuple))

enumerate使您能够迭代序列,并同时拥有索引。可选的“start”arg将有助于简化逻辑。

((index, *inner_tuple))使用index创建新元组,并展开inner_tuple的所有内容。这只适用于python 3,tho。

答案 2 :(得分:1)

您可以在列表推导中使用双for循环执行此操作,使用enumerate生成索引。

data = [
    [
        ('While', 'IN', 'Entity'),
        ('applying', 'VBG', 'O'),
        ('opacity', 'NN', 'Entity'),
        ('to', 'TO', 'Entity'),
        ('a', 'DT', 'Entity'),
        ('form', 'NN', 'Entity'),
        ('should', 'MD', 'O'),
        ('we', 'PRP', 'O'),
        ('use', 'VB', 'Entity'),
        ('a', 'DT', 'Entity'),
        ('decimal', 'NN', 'Entity'),
        ('or', 'CC', 'Entity'),
        ('double', 'JJ', 'Entity'),
        ('value', 'NN', 'Entity'),
        ('?', '.', 'O')
    ],
    [
        ('I', 'PRP', 'O'),
        ('want', 'VBP', 'O'),
        ('to', 'TO', 'Entity'),
        ('use', 'VB', 'Entity'),
        ('a', 'DT', 'Entity'),
        ('trackbar', 'NN', 'O'),
        ('to', 'TO', 'Entity'),
        ('change', 'VB', 'Entity'),
        ('a', 'DT', 'Entity'),
        ('forms', 'JJ', 'Entity'),
        ('opacity', 'NN', 'Entity'),
        ('.', '.', 'O')
    ]
]

newdata = [(i,) + tup for i, lst in enumerate(data, 1) for tup in lst]
for row in newdata:
    print(row)

<强>输出

(1, 'While', 'IN', 'Entity')
(1, 'applying', 'VBG', 'O')
(1, 'opacity', 'NN', 'Entity')
(1, 'to', 'TO', 'Entity')
(1, 'a', 'DT', 'Entity')
(1, 'form', 'NN', 'Entity')
(1, 'should', 'MD', 'O')
(1, 'we', 'PRP', 'O')
(1, 'use', 'VB', 'Entity')
(1, 'a', 'DT', 'Entity')
(1, 'decimal', 'NN', 'Entity')
(1, 'or', 'CC', 'Entity')
(1, 'double', 'JJ', 'Entity')
(1, 'value', 'NN', 'Entity')
(1, '?', '.', 'O')
(2, 'I', 'PRP', 'O')
(2, 'want', 'VBP', 'O')
(2, 'to', 'TO', 'Entity')
(2, 'use', 'VB', 'Entity')
(2, 'a', 'DT', 'Entity')
(2, 'trackbar', 'NN', 'O')
(2, 'to', 'TO', 'Entity')
(2, 'change', 'VB', 'Entity')
(2, 'a', 'DT', 'Entity')
(2, 'forms', 'JJ', 'Entity')
(2, 'opacity', 'NN', 'Entity')
(2, '.', '.', 'O')