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