使用 defaultdict 从 .xlsx 文件附加一个列表

Using defaultdict to append a list from an .xlsx file

我正在尝试获取一个包含两个字段(ID 和 xy 坐标)的 [​​=30=] 文件并创建一个字典,以便每个 ID 都是所有 xy 坐标值的键。

例如,excel 文件如下所示: [1] [1]: http://i.stack.imgur.com/P2agc.png

但是有 900 多个 oID 值

我希望最终格式类似于, [('0',[-121.129247,37.037939,-121.129247,37.037939,-121.056516,36.997779]), ('1',[all,the,coordinates,with,oID,of,1]),('2'[all,the,coordinate,with,oID,of,2]等)]

我正在尝试使用 for 语句遍历 excel sheet 以用前 200 行填充列表,然后将其放入默认字典中。

这是我到目前为止所做的:

wb=openpyxl.load_workbook('simpleCoordinate.xlsx')
sheet=wb['Sheet1']

from collections import defaultdict

CoordDict = defaultdict(list)
for i in range (1,201,1):
    coordinate_list=[(sheet.cell(row=i,column=1).value, sheet.cell(row=i,     column=2).value)]

for oID, xy in coordinate_list:
   CoordDict[oID].append(xy)

print(list(CoordDict.items()))

哪个returns:

[(11, ['-121.177487,35.49885'])]

只有 excel sheet 的第 200 行,而不是整个行..我不确定我做错了什么,是否与 for 语句有关?我是不是以错误的方式思考这个问题?我是 python 的新手,任何建议都会有所帮助!

您正在覆盖 coordinate_list 200 次。相反,创建它,然后使用 += 运算符附加到它。

wb=openpyxl.load_workbook('simpleCoordinate.xlsx')
sheet=wb.get_sheet_by_name('Sheet1')

from collections import defaultdict

coordinate_list = list()
for i in range (1,201,1):
    coordinate_list += [(sheet.cell(row=i,column=1).value, sheet.cell(row=i,     column=2).value)]

coord_dict = defaultdict(list)
for oid, xy in coordinate_list:
    coord_dict[oid] = xy

print(list(coord_dict.items()))