从excel数据循环到一个字典,每个键有多个值

时间:2016-06-24 14:38:47

标签: python excel for-loop dictionary openpyxl

我对Python很新,我认为这个问题相当容易,但我无法弄明白......

我在excel中有一个数据表,其中我有B列字符串和C到I列作为值。我想创建一个字典,其中包含每个键值 B列,我指定了列C到I的值。我想出了如何每行,一次在一次,但我正在寻找一个for循环语法来做它 整个excel数据表。

这是我的代码:

NYSE = {}
NYSE.setdefault(sheet['B5'].value, []).append(sheet['C5'].value)
NYSE.setdefault(sheet['B5'].value, []).append(sheet['D5'].value)
NYSE.setdefault(sheet['B6'].value, []).append(sheet['C6'].value)
NYSE.setdefault(sheet['B6'].value, []).append(sheet['D6'].value)
print NYSE

我可以手动添加到... B7 C7,B7 D7等,但必须有一种方法可以在函数中循环并输出字典。

2 个答案:

答案 0 :(得分:1)

你考虑过使用熊猫吗?我不确定您对数据的目标是什么,但它似乎是实现您想要的最强大的方式。

如果您使用pandas.read_excel(path, sheetname=None),则默认情况下会创建一个字典,其中每个键都是一个工作表,每个值都是该工作表的数据框。然后,您可以迭代字典以将它们合并在一起。使用伪数据样本更容易获得更具体的信息。

答案 1 :(得分:1)

您可以尝试这样的事情:

from collections import defaultdict

d = defaultdict(list)
for line in open("pyex.csv").readlines():
    line = line.strip()
    line = line.split(",")
    key, value = line[0], line[1:]
    d[key] += value
print(d)

因此,如果你有一个看起来像这样的csv文件。第一列是字符串,第二列和后面的每列都是值:

crow    19    13
bird    16    32

此代码将输出:

defaultdict(<class 'list'>, {'crow ': ['19', '13'], 'bird': ['16', '32']})

[以0.1秒完成]

这允许您为每个键设置多个值,因为这些值包含在列表中。

<强>更新

改为使用setdefault

d = {}
for line in open("pyex.csv").readlines():
    line = line.strip()
    line = line.split(",")
    key = line[0]
    for value in line[1:]:
        d.setdefault(key, []).append(value)
print(d)

输出:

{'crow': ['19', '13'], 'bird': ['16', '32']}

甚至使用csv库

import csv

csv_file = open("pyex.csv")
csv_reader = csv.reader(csv_file)

d = {}
for line in csv_reader:
    key = line[0]
    for value in line[1:]:
        d.setdefault(key, []).append(value)
print(d)

正如@martineu所说,你不需要defaultdicts或setdefaults:

import csv

csv_file = open("Book1.csv")
csv_reader = csv.reader(csv_file)

d = {}
for line in csv_reader:
    key = line[0]
    d[key] = line[1:]
print(d)