【问题标题】:Write python nested dictionary items to files将python嵌套字典项写入文件
【发布时间】:2020-10-09 19:43:19
【问题描述】:

我有一个嵌套的键值对字典,结构如下:

(0, {'hoovervilles': 13, 'depression.': 10, 'everyday:': 6}), (1, {'mother': 10, 'child': 9, 'daughter': 3, 'prevail': 1}), (2, {'music': 6, 'style,': 2, 'listening': 2})

对于这本词典中的每一项,我想用keysvalues 写出tsv

这会为字典中的单个项目写入键、值:

csv_file = '.../frequencies_dir/2.tsv'

try:
    with open(csv_file, 'w') as f: 
        for key, value in entry.items(): 
            f.write("%s\t%s\n"%(key,entry[key])) 
except IOError:
    print("I/O error")

如何将字典中的 每个 项写入目录中的单独文件 (tsv) 并根据字典中的项编号命名 tsv 文件(例如 @987654328 @、3.tsv 等)

【问题讨论】:

  • 最外层的数据结构是什么?你的例子有(0, {...}) (1, {...}),但这不是有效的python。
  • 如果我理解正确,你有第一项是数字,第二项是字典的元组列表吗?

标签: python dictionary nested directory-structure writefile


【解决方案1】:

您的输入数据在 python 中无效。但是,如果是这样的:

entry= [(0, {'hoovervilles': 13, 'depression': 10, 'everyday': 6}),
    (1, {'mother': 10, 'child': 9, 'daughter': 3, 'prevail': 1}),
    (2, {'music': 6, 'style': 2, 'listening': 2})]

你可以写:

for e in entry:
    print(e[0])
    with open(os.path.join('/Users/soumyabratakole/test/', str(e[0]) + '.tsv'),'w') as f:
        w = csv.DictWriter(f, delimiter='\t', fieldnames = e[1].keys())
        w.writeheader()
        w.writerow(e[1])

【讨论】:

    【解决方案2】:

    试试下面的

    entry = (0, {'hoovervilles': 13, 'depression.': 10, 'everyday:': 6}), (1, {'mother': 10, 'child': 9, 'daughter': 3, 'prevail': 1}), (2, {'music': 6, 'style,': 2, 'listening': 2});
    for i in entry:
        print(i[1])
        try:
            with open(f'{i[0]}.tsv', 'w') as f:
                for key, value in i[1].items(): 
                    f.write("%s\t%s\n"%(key, i[1][key]))
                    break
        except IOError:
            print("I/O error")
    

    这样您将获得三个.tsv 文件,例如0.tsv0.tsv2.tsv,其中

    0.tsv 看起来像

    hoovervilles    13
    
    
    
    

    等等

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      相关资源
      最近更新 更多