【问题标题】:Representing python dictionaries as matrices or csvs将 python 字典表示为矩阵或 csvs
【发布时间】:2012-07-16 05:05:47
【问题描述】:

我正在尝试获取具有以下结构的 python 字典:

>>>my_dict
>>>(i1,j1):{c1:1,c2:3,c3:4},(i2,j2):{c1:1,c2:1,c3:1}...

我想做的是在矩阵或某种用于可视化的表格中获取密钥 (i,j) 和 r1,r2,r3.rn。所以表格表示应该是这样的。

       c1  c2  c3 ...rN
i1,j1   1   3  4        
i2,j2   1   1  1     
iN,jN

基本上,我希望行上的主键和列上的值(这是另一个字典)的键。然后轻松地将键映射到列和行值。

我说得很具体,这只是一个例子。我实际上对我在寻找什么感到困惑。我必须这样做很多次,他们是将字典映射到这样的表的简单方法吗?有没有我应该寻找的模块?

提前致谢, J

【问题讨论】:

  • 这是一个关于如何打印你提出的数据结构的问题吗?还是关于实际存储数据?

标签: python maps iteration dictionary


【解决方案1】:
dic={('i1','j1'):{'c1':1,'c2':3,'c3':4},('i2','j2'):{'c1':1,'c2':1,'c3':1}}
header=list(max(dic.values()))
print '\t',
print "  ".join(sorted(header))
for x in dic:
    print ",".join(x)+'\t',
    for y in sorted(dic[x]):
        print str(dic[x][y])+"  ",
    print    

输出:

        c1  c2  c3
i1,j1   1   3   4  
i2,j2   1   1   1  

要将其写入文件,请尝试以下操作:

with open('data.txt','w') as f:
    dic={('i1','j1'):{'c1':1,'c2':3,'c3':4},('i2','j2'):{'c1':1,'c2':1,'c3':1}}
    header=list(max(dic.values()))
    f.write('\t')
    f.write("  ".join(sorted(header))+'\n')
    for x in dic:
        f.write(",".join(x)+'\t')
        for y in sorted(dic[x]):
            f.write(str(dic[x][y])+"  ")
        f.write('\n')

【讨论】:

  • 没错,这就是完成任务的答案!我只需要更好地考虑数据结构。例如,我不知道你可以对字典进行排序。
  • 这很接近,它没有正确计算所有值,但我明天会弄清楚。
【解决方案2】:
{ 
    'primary_key1': [{key: data},{key: data},{key: data},{key: data},{key: data},{key: data}]},
    'primary_key2': [{key: data},{key: data},{key: data},{key: data},{key: data},{key: data}]} 
     ...
    'primary_keyN': [{key: data},{key: data},{key: data},{key: data},{key: data},{key: data}]}
}

所以现在您可以使用 PK 将它们取回,如果您有密钥,您可以将它们存储在 dict 中,其中包含重复的密钥,例如:

'primary_key1': [{key: data},{key: data},{key: data},{key: data},{key: data},{key: data}]

否则,如果您始终拥有唯一的值键,则进行嵌套:

'primary_key1': {key: data, key: data, key: data},

否则只有数据:

'primary_key1': [data, data, data],

希望这会对你有所帮助。

【讨论】:

  • 我不确定这个答案如何解决这个问题。看起来 OP 已经有了一个可以运行的数据结构。
  • jdi 他需要将它们存储为表格格式,并且可以通过多种方式来定位它,而不是上面评论中 Ashvini 女士提出的复杂循环,
  • 你刚刚称@AshwiniChaudhary 为女士吗?哈哈。无论如何。我的观点是 OP 的数据结构工作得非常好,并且支持多键元组格式。将值设为列表将需要通过可能与所需列键完全无关的索引进行访问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 2021-11-25
  • 2016-11-05
相关资源
最近更新 更多