如何将字典中的每个键:值对转换为2D数组中的平行?

时间:2018-06-16 19:25:55

标签: python python-3.x list dictionary

我有以下字典:

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]}

我想将其转换为以下2D数组:

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]]

3 个答案:

答案 0 :(得分:4)

您现有代码的问题在于DraftEditorContents-core.react.js:80 Uncaught TypeError: nextEditorState.getDirectionMap is not a function at DraftEditorContents.shouldComponentUpdate (DraftEditorContents-core.react.js:80) at checkShouldComponentUpdate (react-dom.development.js:11345) at updateClassInstance (react-dom.development.js:11754) at updateClassComponent (react-dom.development.js:13153) at beginWork (react-dom.development.js:13824) at performUnitOfWork (react-dom.development.js:15863) at workLoop (react-dom.development.js:15902) at HTMLUnknownElement.callCallback (react-dom.development.js:100) at Object.invokeGuardedCallbackDev (react-dom.development.js:138) at invokeGuardedCallback (react-dom.development.js:187) 行,您附加了包含final_list.append([k, v])k的列表,这是另一个列表。在这里你应该完成解包,将它们压缩成一个单一的列表,即

v

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

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

在支持列表中已加星标的作业的python(3.6+)的更高版本中,您现在可以

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

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

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

答案 1 :(得分: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]]

答案 2 :(得分:0)

如果将k转换为列表,则可以将其添加到v(已经是列表)。例如。 [1] + [2] = [1,2]

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