不规则格式的Python列表

不规则格式的Python列表,python,Python,我有数据(使用Gensim的LDA结果),如下所示: [(1, 0.97456828373415116)] [(0, 0.91883125256489728), (1, 0.020225186991467976), (2, 0.020314851937259213), (3, 0.020382294889184499), (4, 0.020246413617191008)] [(0, 0.93783520386426555), (1, 0.015481826214088806), (2, 0.0

我有数据(使用Gensim的LDA结果),如下所示:

[(1, 0.97456828373415116)]
[(0, 0.91883125256489728), (1, 0.020225186991467976), (2, 0.020314851937259213), (3, 0.020382294889184499), (4, 0.020246413617191008)]
[(0, 0.93783520386426555), (1, 0.015481826214088806), (2, 0.015545735781026492), (3, 0.015535246185968628), (4, 0.015601987954650424)]
[(2, 0.98493696818505228)]
[(3, 0.99067359305252778)]
[(0, 0.73578249201070511), (3, 0.25197028613750805)]
我想转换为以下格式:

[(0, 0), (1, 0.97456828373415116), (2, 0), (3, 0), (4, 0)]
[(0, 0.91883125256489728), (1, 0.020225186991467976), (2, 0.020314851937259213), (3, 0.020382294889184499), (4, 0.020246413617191008)]
[(0, 0.93783520386426555), (1, 0.015481826214088806), (2, 0.015545735781026492), (3, 0.015535246185968628), (4, 0.015601987954650424)]
[(0, 0), (1, 0), (2, 0.98493696818505228), (3, 0), (4, 0)]
[(0, 0), (1, 0), (2, 0), (3, 0.96747728928637211), (4, 0)]
[(0, 0), (1, 0), (2, 0), (3, 0.99067359305252778), (4, 0)]
[(0, 0.73578249201070511), (1, 0), (2, 0), (3, 0.25197028613750805), (4, 0)]

您可以使用
map()
函数将每个子列表更改为
dict

data = [[(1, 0.97456828373415116)],
[(0, 0.91883125256489728), (1, 0.020225186991467976), (2, 0.020314851937259213), (3, 0.020382294889184499), (4, 0.020246413617191008)],
[(0, 0.93783520386426555), (1, 0.015481826214088806), (2, 0.015545735781026492), (3, 0.015535246185968628), (4, 0.015601987954650424)],
[(2, 0.98493696818505228)],
[(3, 0.99067359305252778)],
[(0, 0.73578249201070511), (3, 0.25197028613750805)]]

results = list(map(dict, data))
然后使用
dict.get
方法,为字典中不存在的键指定默认值
0

for i in range(5):
    print(results[0].get(i, 0))
上述结果:

0
0.9745682837341512
0
0
0

一种非常简单的方法是将构造的dict与默认值一起使用,然后对其进行更新:

>>> d = dict([(0,0),(1,0),(2,0),(3,0)])
>>> print(d)
{0: 0, 1: 0, 2: 0, 3: 0}
>>> d.update([(0, 0.73578249201070511), (3, 0.25197028613750805)])
>>> print(d)
{0: 0.7357824920107051, 1: 0, 2: 0, 3: 0.25197028613750805}
编辑

结合hgwell关于输出元组列表的建议,这里有一个完整的函数(可能在某种程度上做得更好,但无论如何这是可行的):

在行动中

>>> z = listify([[(1, 0.97456828373415116)],
                 [(0, 0.91883125256489728), (1, 0.020225186991467976), (2, 0.020314851937259213), (3, 0.020382294889184499), (4, 0.020246413617191008)],
                 [(2, 0.98493696818505228)]])
>>> pprint(z)
[[(0, 0), (1, 0.9745682837341512), (2, 0), (3, 0), (4, 0)],
 [(0, 0.9188312525648973),
  (1, 0.020225186991467976),
  (2, 0.020314851937259213),
  (3, 0.0203822948891845),
  (4, 0.020246413617191008)],
 [(0, 0), (1, 0), (2, 0.9849369681850523), (3, 0), (4, 0)]]
d.items()
或在
python3
list(d.items())
中提供所需的列表格式。@hgwells哈哈。我只知道在python3中必须有一种方法来做d.items()这样的事情!谢谢我将使用一个函数定义进行编辑,该函数定义包含了这一点(我以后不会忘记它…)。
>>> z = listify([[(1, 0.97456828373415116)],
                 [(0, 0.91883125256489728), (1, 0.020225186991467976), (2, 0.020314851937259213), (3, 0.020382294889184499), (4, 0.020246413617191008)],
                 [(2, 0.98493696818505228)]])
>>> pprint(z)
[[(0, 0), (1, 0.9745682837341512), (2, 0), (3, 0), (4, 0)],
 [(0, 0.9188312525648973),
  (1, 0.020225186991467976),
  (2, 0.020314851937259213),
  (3, 0.0203822948891845),
  (4, 0.020246413617191008)],
 [(0, 0), (1, 0), (2, 0.9849369681850523), (3, 0), (4, 0)]]