【问题标题】:How can I convert each key:value pair in a dictionary to flat rows in a 2D array?如何将字典中的每个键:值对转换为二维数组中的平面行?
【发布时间】:2018-06-16 19:25:55
【问题描述】:

我有以下字典:

dct = {'F': [0, 0, 0, 1], 'T': [0, 3, 0, 4], 'B': [1, 1, 0, 1], 'K': [2, 2, 0, 1], 'J': [2, 4, 0, 2], 'Bxx': [4, 4, 0, 1]}

我想将其转换为以下二维数组:

ultimate_list = [['F', 0, 0, 0, 1], ['T', 0, 3, 0, 4], ['B', 1, 1, 0, 1], ['K', 2, 2, 0, 1], ['J', 2, 4, 0, 2], ['Bxx', 4, 4, 0, 1]]

到目前为止,我已经完成了以下操作,但并没有完全得到我正在寻找的输出:

final_list = []

for k, v in dct.items():
    final_list.append([k, v])


flat_list = []
for sublist in final_list:
    for item in sublist:
        flat_list.append(item)

print(flat_list)

哪个输出这个:

flat_list = ['F', [0, 0, 0, 1], 'T', [0, 3, 0, 4], 'B', [1, 1, 0, 1], 'K', [2, 2, 0, 1], 'J', [2, 4, 0, 2], 'Bxx', [4, 4, 0, 1]]

【问题讨论】:

  • @coldspeed 对不起,谢谢。我认为它现在已修复。

标签: python python-3.x list dictionary


【解决方案1】:

您现有代码的问题在于final_list.append([k, v]) 行,您正在附加一个包含kv 的列表,这是另一个列表。在这里,您应该进行解包以将它们展平为单个 1D 列表,即

for k, v in dct.items():
    final_list.append([k, *v])

但是,您可以使用列表推导来缩短代码。旧版本的 python 允许你这样做

>>> [[k] + [v] for k, v in dct.items()]

在更高版本的 python (3.6+) 支持列表中的星号分配,您现在可以这样做

>>> [[k, *v] for k, v in dct.items()]

[['F', 0, 0, 0, 1],
 ['T', 0, 3, 0, 4],
 ['B', 1, 1, 0, 1],
 ['K', 2, 2, 0, 1],
 ['J', 2, 4, 0, 2],
 ['Bxx', 4, 4, 0, 1]]

请注意,结果的顺序与仅在 python3.6+ 上的字典顺序相同(字典在旧版本上不排序)。

【讨论】:

    【解决方案2】:

    只需更改以下语句

    final_list.append([k, v])
    

    final_list.append([k] + v)
    

    并删除除最后一个 print 语句之外的上述语句后面的代码。你已经完成了。

    我已将您的代码修改如下。

    dct = {'F': [0, 0, 0, 1], 'T': [0, 3, 0, 4], 'B': [1, 1, 0, 1], 'K': [2, 2, 0, 1], 'J': [2, 4, 0, 2], 'Bxx': [4, 4, 0, 1]}
    
    final_list = []
    
    for k, v in dct.items():
        final_list.append([k] + v)
    
    print(final_list)
    

    » 输出

    [['B', 1, 1, 0, 1], ['F', 0, 0, 0, 1], ['T', 0, 3, 0, 4], ['J', 2, 4, 0, 2], ['Bxx', 4, 4, 0, 1], ['K', 2, 2, 0, 1]]
    

    【讨论】:

      【解决方案3】:

      如果您将 k 转换为 list ,那么您只需将其添加到 v (这已经是一个列表)。例如。 [1] + [2] = [1,2]

      [[k] + v for k, v in dct.items()]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-23
        • 2011-09-30
        • 2017-08-26
        • 1970-01-01
        相关资源
        最近更新 更多