从 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)
我是 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)