将Python字典转换为列表的列表

3

我接手了一段令人困惑的代码,它使用一个嵌套的列表来形成表格,主要是从不同的数据源获取数据,然后通过与其他API交互,将其转换为字典。字典的键是由一个字母和一个数字组成的,就像在Excel文件中一样,下面是一个例子:

[
    [elem1, elem2, elem3...],
    [item1, item2, item3...]
    [...]
]

transforms into

{
 "A1": elem1,
 "A2": elem2,
 "A3": elem3,
  ...
 "B1": item1,
 "B2": item2,
 ...
}

为了进行这样的转换,我编写了以下代码片段,其中items是列表的列表,letters是包含字母表的列表:
def create_dict(items, letters):
    data = {}
    for cidx, col in enumerate(items):
        for ridx, row in enumerate(col):
            data[letters[cidx] + str(ridx + 1)] = row

    return data

我知道有更好的方法来实现这个,比如使用pandas和其他工具,但我想保留这种方式,而且转换成列表的代码让我很难写,因为需要消耗字典并将其转换为一个嵌套列表,以便其他内部的API可以向该表中插入更多信息。


如果你的表格超过了26列,会出现错误。因此我建议动态生成字母,或者进行适当的检查。 - Anubhav Gupta
使用 '%d-%d' %(cidx, ridx) 作为键已经足够好了。 - Terran
1个回答

3

看起来你对于从嵌套列表创建字典的代码还算满意,现在你想找一种方法将这个过程反过来:从字典中得到一个嵌套列表。其中一种实现方式是使用 itertools 库的 groupby 函数按字母对字典键进行分组。

例如:

import collections
import itertools

d = {
    "A1": "elem1",
    "A2": "elem2",
    "A3": "elem3",
    "B1": "item1",
    "B2": "item2",
}
od = dict(sorted(d.items()))

output_list = []

for _, group in itertools.groupby(od.items(), key=lambda item_tuple: item_tuple[0][0]):
    values = [
        one_value
        for _, one_value in group
    ]
    output_list.append(values)
    
print(output_list)

输出:

[['elem1', 'elem2', 'elem3'], ['item1', 'item2']]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接