【问题标题】:Python: how to combine a list of lists for a dictionary keyPython:如何为字典键组合列表列表
【发布时间】:2017-03-20 03:00:50
【问题描述】:

我的字典,'ex' 看起来像这样:

ex = {'G1': ['D1','D9', ['A1', 'H1', 'I1']], 'D5': ['D4', ['A5', 'G5', 'H5', 'I5']]}

我希望每个键都有一个值列表,而不是一个包含列表的列表。我该怎么做呢?所以我的列表看起来像:

ex = {'G1': ['D1','D9','A1', 'H1', 'I1'], 'D5': ['D4','A5', 'G5', 'H5', 'I5']}

我最终得到我的 dict 的方法是将一个列表附加到我的 'ex' dict 中,如下所示:

ex[key].append([list])

'ex' 之前对每个键都有一个值列表,在添加一个新列表后,我想修复这个嵌套。

【问题讨论】:

  • 这份名单是怎么来的?你查过如何扁平化列表吗?你应该分享一些代码。
  • 列表可以嵌套任意深度吗?还是最大深度为 2?
  • @Willem 最大深度为 2
  • 看看itertools.chain_from_iterable
  • @PM2Ring 完全正确,我怀疑你可以在源头上解决这个问题,而不是以后变平。

标签: python list key frame


【解决方案1】:

感谢@PM2RING的提醒,你可以更新ex

ex = {'G1': ['D1','D9', ['A1', 'H1', 'I1']], 'D5': ['D4', ['A5', 'G5', 'H5', 'I5']]}

for k,v in ex.items():
    tmp=[]
    for i in v:
        if isinstance(i,list):
            tmp.extend(i)
        else:
            tmp.append(i)
    ex[k]=tmp

print ex

输出:

{'D5': ['D4', 'A5', 'G5', 'H5', 'I5'], 'G1': ['D1', 'D9', 'A1', 'H1', 'I1']}

【讨论】:

  • 谢谢,这就是我要找的答案!
  • @Cora 你真的应该修复更新ex 的代码以使用.extend,而不是使用之后的代码来修复不需要的嵌套。
  • 顺便说一句,您可以放心地修改ex,无需构建新的字典。事实上,如果您愿意,您甚至可以使用 v[:]= 分配就地修改 v 列表,尽管使用新列表会稍微快一些。
  • @PM2Ring 感谢您的提醒,我更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 2016-02-22
  • 2013-02-19
  • 2018-01-11
相关资源
最近更新 更多