【问题标题】:Concatenating irregular lists in python dictionaries [duplicate]在python字典中连接不规则列表[重复]
【发布时间】:2021-09-08 07:01:57
【问题描述】:

我有一个带有 2 个列表的 Python 字典,如下所示

dict_ans={'Car':[['Toyota', 'Honda'], ['Ford','GM']],
          'Truck':['Kenworth', 'Mack']
         }

我正在尝试以以下格式获取它:

dict_ans={'Car':['Toyota', 'Honda','Ford','GM'],
          'Truck':['Kenworth','Mack']
         }

我尝试了链接https://stackabuse.com/python-how-to-flatten-list-of-lists中的几个选项 但在每种情况下,'Truck' 都会解析为 ['K','e','n','w','o','r','t','h','M','a','c','k'] Car 条目运行良好。 关于实现这一目标的最佳方法的任何想法? 谢谢!

【问题讨论】:

  • 您可以在展平之前检查元素类型。如果列表包含列表,则展平,否则不要。
  • 包含您尝试过的代码作为问题的一部分,而不是作为外部网站的链接

标签: python


【解决方案1】:

numpy.hstack试试字典理解

import numpy as np

new_dict = {k:np.hstack(v).tolist() for k,v in dict_ans.items()} 
# {'Car': ['Toyota', 'Honda', 'Ford', 'GM'], 'Truck': ['Kenworth', 'Mack']}

【讨论】:

  • 你不需要重建字典甚至重新绑定值,因为列表是可变的。 for v in dict_ans.values(): v[:] = np.hstack(v)
【解决方案2】:

也许是自定义函数和dict 理解?

def flatten(x):
    if isinstance(x, list):
        return [a for i in x for a in flatten(i)]
    else:
        return [x]
>>> {k: flatten(dict_ans[k]) for k in dict_ans}
{'Car': ['ToyotaHonda', 'Ford', 'GM'], 'Truck': ['Kenworth', 'Mack']}

【讨论】:

    猜你喜欢
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2014-12-14
    • 2018-05-01
    • 2017-08-02
    • 1970-01-01
    • 2015-09-24
    相关资源
    最近更新 更多