【问题标题】:Python : How to create a flat dictionary from a nested dictionary that is indexed using a tuple?Python:如何从使用元组索引的嵌套字典创建平面字典?
【发布时间】:2020-06-26 19:01:59
【问题描述】:

我有一个嵌套字典如下:

{(1, 1): {'Transportation_Cost': 4},
 (1, 2): {'Transportation_Cost': 5},
 (1, 3): {'Transportation_Cost': 6},
 (1, 4): {'Transportation_Cost': 8},
 (1, 5): {'Transportation_Cost': 10},
 (2, 1): {'Transportation_Cost': 6},
 (2, 2): {'Transportation_Cost': 4},
 (2, 3): {'Transportation_Cost': 3},
 (2, 4): {'Transportation_Cost': 5},
 (2, 5): {'Transportation_Cost': 8},
 (3, 1): {'Transportation_Cost': 9},
 (3, 2): {'Transportation_Cost': 7},
 (3, 3): {'Transportation_Cost': 4},
 (3, 4): {'Transportation_Cost': 2},
 (3, 5): {'Transportation_Cost': 4}}

我想把它转换成一个像这样的平面字典:

{(1, 1): 4,
 (1, 2): 5,
 (1, 3): 6,
 (1, 4): 8,
 (1, 5): 10,
 (2, 1): 6,
 (2, 2): 4,
 (2, 3): 3,
 (2, 4): 5,
 (2, 5): 8,
 (3, 1): 9,
 (3, 2): 7,
 (3, 3): 4,
 (3, 4): 2,
 (3, 5): 4}

我希望有一个简单的函数可以使我的嵌套字典变平。我尝试了 here 中的 FlatDict 函数,但我不确定如何修改它,因为我的字典中有一个元组。

关于如何获得所需输出的任何建议?

【问题讨论】:

标签: python dictionary tuples


【解决方案1】:

你可以试试 dict Comprehension:

dct={(1, 1): {'Transportation_Cost': 4},
 (1, 2): {'Transportation_Cost': 5},
 (1, 3): {'Transportation_Cost': 6},
 (1, 4): {'Transportation_Cost': 8},
 (1, 5): {'Transportation_Cost': 10},
 (2, 1): {'Transportation_Cost': 6},
 (2, 2): {'Transportation_Cost': 4},
 (2, 3): {'Transportation_Cost': 3},
 (2, 4): {'Transportation_Cost': 5},
 (2, 5): {'Transportation_Cost': 8},
 (3, 1): {'Transportation_Cost': 9},
 (3, 2): {'Transportation_Cost': 7},
 (3, 3): {'Transportation_Cost': 4},
 (3, 4): {'Transportation_Cost': 2},
 (3, 5): {'Transportation_Cost': 4}}

dct={k:v['Transportation_Cost'] for k,v in dct.items()}
print(dct)

输出:

{(1, 1): 4,
 (1, 2): 5,
 (1, 3): 6,
 (1, 4): 8,
 (1, 5): 10,
 (2, 1): 6,
 (2, 2): 4,
 (2, 3): 3,
 (2, 4): 5,
 (2, 5): 8,
 (3, 1): 9,
 (3, 2): 7,
 (3, 3): 4,
 (3, 4): 2,
 (3, 5): 4}

【讨论】:

    【解决方案2】:

    以下是使用dict 理解的方法:

    d = {(1, 1): {'Transportation_Cost': 4},
         (1, 2): {'Transportation_Cost': 5},
         (1, 3): {'Transportation_Cost': 6},
         (1, 4): {'Transportation_Cost': 8},
         (1, 5): {'Transportation_Cost': 10},
         (2, 1): {'Transportation_Cost': 6},
         (2, 2): {'Transportation_Cost': 4},
         (2, 3): {'Transportation_Cost': 3},
         (2, 4): {'Transportation_Cost': 5},
         (2, 5): {'Transportation_Cost': 8},
         (3, 1): {'Transportation_Cost': 9},
         (3, 2): {'Transportation_Cost': 7},
         (3, 3): {'Transportation_Cost': 4},
         (3, 4): {'Transportation_Cost': 2},
         (3, 5): {'Transportation_Cost': 4}}
    
    d = {k:d[k]['Transportation_Cost'] for k in d}
    
    print(d)
    

    输出:

    {(1, 1): 4,
     (1, 2): 5,
     (1, 3): 6,
     (1, 4): 8,
     (1, 5): 10,
     (2, 1): 6,
     (2, 2): 4,
     (2, 3): 3,
     (2, 4): 5,
     (2, 5): 8,
     (3, 1): 9,
     (3, 2): 7,
     (3, 3): 4,
     (3, 4): 2,
     (3, 5): 4}
    

    【讨论】:

      【解决方案3】:

      您可以从 Series 对象创建字典,而不是编辑字典。

      pd.Series(tc).to_dict()
      

      那么你就不用担心字典格式的字典了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-09
        • 2018-06-10
        • 2013-09-08
        • 1970-01-01
        • 2017-03-08
        • 2019-08-15
        • 2019-11-29
        相关资源
        最近更新 更多