从 excel 数据循环到每个键有多个值的字典中

Loop from excel data into a dictionary with multiple values per key

我是 Python 的新手,我觉得这个问题很简单,但我想不出来...

我在 excel 中有一个数据 table,其中我有 B 列字符串和 C 到 I 列作为值。我想创建一个字典,其中的每个键值 B 列,我通过 I 分配 C 列的值。我弄清楚了如何每行一次一个地执行此操作,但我正在寻找 for 循环语法来执行此操作 在整个 excel 数据中 table.

这是我的代码:

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 等,但必须有一种方法可以在函数中循环并输出字典。

您是否考虑过使用 Pandas?我不确定你对数据的目标是什么,但这似乎是做你想做的事情的最可靠方法。

如果您使用 pandas.read_excel(path, sheetname=None),那么它将默认创建一个字典,其中每个键都是一个 sheet,每个值都是 sheet 的一个数据帧。然后您可以遍历字典以将它们合并在一起。使用数据的伪样本会更容易获得更具体的信息。

您可以尝试这样的操作:

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)