【问题标题】:How to convert a nested dictionary which contains nested list如何转换包含嵌套列表的嵌套字典
【发布时间】:2021-08-10 23:54:24
【问题描述】:

我有一个包含(嵌套列表)的嵌套字典。我浏览了 Stackoverflow 中的几篇文章(hereherehere)。但是,我不知道如何解决这些问题。字典看起来像

{ 'LinReg': { 'First': [ array([ 0.83333333, -0.77777778, -0.6       ,  0.72222222]),
                         array([0.4       , 0.05555556, 0.4       , 0.44444444])],
              'Second': [ array([[5.16666667, 3.28571429, 2.4       , 6.38461538]]),
                              array([[ 4.83333333, 23.        ,  1.26666667,  3.22222222]])],
              'Third': [ array([[ 5.16666667, -3.28571429, -2.4       ,  6.38461538]]),
                                     array([[ 4.83333333, 23.        ,  1.26666667,  3.22222222]])],
              'Fourth': [ array([0.83333333, 0.77777778, 0.6       , 0.72222222]),
                                array([0.4       , 0.05555556, 0.4       , 0.44444444])]},
  'kNN': { 'First': [ array([ 0.        , -0.75      ,  0.5       ,  0.41666667]),
                      array([ 0.        , -0.8       , -0.1       ,  0.08333333])],
           'Second': [ array([[1.        , 2.33333333, 4.        , 7.4       ]]),
                           array([[       inf, 2.75      , 1.4       , 1.41666667]])],
           'Third': [ array([[ 0.        , -2.33333333,  4.        ,  7.4       ]]),
                                  array([[ 1.        , -2.75      , -1.4       ,  1.41666667]])],
           'Fourth': [ array([0.        , 0.75      , 0.5       , 0.41666667]),
                             array([0.        , 0.8       , 0.1       , 0.08333333])]}}

我正在尝试的代码

a = ["Album/Track"] + dictionary.keys()
x = list(set([y for z in dictionary.values() for y in z.keys()]))
rows = [a] + [[q] + [dictionary[p].get(q, "-") for p in a[1:]] for q in x]
with open("my.csv", "wb") as csvfile:
    writer = csv.writer(csvfile)
    for row in rows:
        writer.write(row)

我怎样才能把这本字典转换成如下的 CSV 文件?

LinReg First Array1_Output1, Array1_Output2, and so on
             Array2_Output1, Array2_Output2, and so on
       Second 
       Third
       Fourth
kNN First Array1_Output1, Array1_Output2, and so on
             Array2_Output1, Array2_Output2, and so on
       Second 
       Third
       Fourth

【问题讨论】:

  • 你能编辑问题并把预期的输出放在那里吗?
  • 你想得到什么?
  • 如果没有看到您的任何数据或您编写的任何产生问题的代码,很难回答您的问题。请查看 Jon Skeet 的优秀博文 WRITING THE PERFECT QUESTION 以获取更新问题的指导。有关提出好问题的更详细教程,请参阅 Eric S. Raymond 的网站How To s The Smart Way
  • 您发布的数据究竟代表什么?
  • @AndrejKesely 和 Onyambu 更新了预期输出

标签: python-3.x list csv dictionary nested


【解决方案1】:

如果d 是您问题中的字典,您可以这样做:

import csv

with open("data.csv", "w") as f_in:
    writer = csv.writer(f_in)
    for k, v in d.items():
        for kk, vv in v.items():
            for vvv in vv:
                writer.writerow([k, kk] + list(vvv.ravel()))

创建data.csv(来自 LibreOffice 的屏幕截图):

【讨论】:

    【解决方案2】:
    a_file = open("sample.csv", "w")
    a_dict = {Key0: Value0, Key1: Value1....}
    
    writer = csv.writer(a_file)
    for key, value in a_dict.items():
        writer.writerow([key, value])
    

    这个方法对你有帮助吗? CSV 文件最后应该是什么样子?

    【讨论】:

    • 感谢您的回复。我已经更新了预期输出的问题
    猜你喜欢
    • 2020-09-03
    • 2022-12-05
    • 2023-03-11
    • 2021-04-27
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 2011-08-21
    相关资源
    最近更新 更多