使原始字典理智

时间:2014-02-12 06:35:00

标签: python csv dictionary

我从csv引入了一个词典:{'0ca6f08e': '1111', '89b2e9ab': '2222', '0c2e5b6d': '3333', '07287d73': '4444'}

需要的是: {'id' :'0ca6f08e', 'thing': '1111'}, {'id': '89b2e9ab', 'thing': '2222'}, {'id: '0c2e5b6d', 'thing': '3333'}

这是为了给dict带来秩序,所以我可以稍后以理智的方式操作。我不清楚如何采取像csv:

0ca6f08e,1111
89b2e9ab,2222
0c2e5b6d,3333

注入理智和以后使用的钥匙。

3 个答案:

答案 0 :(得分:2)

我们可以使用列表理解来解决这个问题:

>>> original = {'0ca6f08e': '1111', '89b2e9ab': '2222', '0c2e5b6d': '3333', '07287d73': '4444'}
>>> parsed = [{'id': key, 'thing': value} for key, value in a.items()]
>>> parsed
[{'thing': '1111', 'id': '0ca6f08e'}, {'thing': '2222', 'id': '89b2e9ab'}, {'thing': '3333', 'id': '0c2e5b6d'}, {'thing'
: '4444', 'id': '07287d73'}]

我们基本上抓住原始字典中的每个键和相应的值,并将其转换为字典列表。

请注意,使用dict的items方法直接获取键和值可能会更简洁,并循环显示:

>>> original.items()
[('0ca6f08e', '1111'), ('89b2e9ab', '2222'), ('0c2e5b6d', '3333'), ('07287d73', '4444')]

答案 1 :(得分:1)

如果您是第一次阅读该文件,可以按以下方式修复结果:

with open('foo.csv') as f:
   for line in f:
      lines = [{'id': a, 'thing': b} for a,b in line.split(',')]

如果您想修复字典中的结果:

lines = [{'id': a, 'thing': b} for a,b in big_dict.iteritems()]

答案 2 :(得分:1)

您可以使用csv模块的DictReader来读取csv文件。

以下是一个例子:

import csv
with open('example.csv') as csvfile:
    for csv_dict in csv.DictReader(csvfile, fieldnames=["id", "thing"])
        # Now you can use the csv_dict as a normal dictionary
        print csv_dict["id"]