我是 Python 新手,正在嘗試從 csv 構建資料字典。我沒有很大的靈活性來更改 csv。我不確定將串列用作資料字典中的值是否更容易(甚至可能),然后使用某種索引訪問該串列中的特定值,或者我是否應該將資料匯入有一個附加鍵,只有一個浮點數作為值。
這是 csv 中的結構示例:
Tester = [[1, 1, 3, 1, 10, 5, 10],
[1, 2, 3, 7, 5, 3, 8 ],
[1, 4, 5, 9, 7, 2, 8 ],
[2, 1, 2, 0, 0, 0, 0 ],
[2, 3, 5, 6, 4, 3, 2 ],
[2, 5, 6, 7, 10, 4, 4 ],]
我不知道如何用四個鍵生成這本字典:
(1, 1, 3, 1) = 1
(1, 1, 3, 2) = 10
(1, 1, 3, 3) = 5
(1, 1, 3, 4) = 10
(1, 2, 3, 1) = 7
(1, 2, 3, 2) = 5
(1, 2, 3, 3) = 3
(1, 2, 3, 4) = 8
(1, 4, 5, 1) = 9
(1, 4, 5, 2) = 7
...
目前,我改為使用串列作為值并獲得以下輸出。我可以將輸出保持原樣,但隨后出現值錯誤。或者,我可以嘗試生成上面的輸出,但我不知道該怎么做。這實際上在數學上表示的是一個帶有四個下標的變數,所以我不確定這里的最佳實踐是什么。
# Import libraries
from gurobipy import *
import csv
from math import *
import numpy as np
from random import *
import time
# arc capacity
capacityatest = open('C:/Users/Emma/Documents/2021-2022/Thesis/Data/tester.csv', 'r')
csv_capacityatest = csv.reader(capacityatest)
mydict_capacityatest = {}
for row in csv_capacityatest:
mydict_capacityatest[(row[0], row[1],row[2])] = list(row[3:7])
print(mydict_capacityatest)
arc, capacityatest = multidict(mydict_capacityatest)
{('1', '1', '3'): ['1', '10', '5', '10'], ('1', '2', '3'): ['7', '5', '3', '8'], ('1', '4', '5'): ['9', '7', '2', '8'], ('1', '7', '10'): ['9', '9', '4', '5'], ('1', '11', '12'): ['3', '4', '4', '7'], ('2', '1', '2'): ['0', '0', '0', '0'], ('2', '3', '5'): ['6', '4', '3', '2'], ('2', '5', '6'): ['7', '10', '4', '4'], ('2', '9', '10'): ['3', '2', '1', '7']}
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-10-b7e72ced1492> in <module>
15 print(mydict_capacityatest)
16
---> 17 arc, capacityatest = multidict(mydict_capacityatest)
ValueError: too many values to unpack (expected 2)
uj5u.com熱心網友回復:
當您遍歷每一行時,還要遍歷元素 3 向前 ( row[3:])。您可以使用enumerate()帶有第二個引數的函式使索引從 1 開始。然后,使用行的前三個元素和專案的新“索引”構造鍵。然后,只需將該值分配給字典中的該鍵。不需要multidicts。
csv_capacityatest = [[1, 1, 3, 1, 10, 5, 10],
[1, 2, 3, 7, 5, 3, 8 ],
[1, 4, 5, 9, 7, 2, 8 ],
[2, 1, 2, 0, 0, 0, 0 ],
[2, 3, 5, 6, 4, 3, 2 ],
[2, 5, 6, 7, 10, 4, 4 ],]
mydict_capacityatest = {}
for row in csv_capacityatest:
key_start = row[0:3]
for index, item in enumerate(row[3:], 1):
key = tuple(key_start [index])
mydict_capacityatest[key] = item
這給出了這個字典:
{(1, 1, 3, 1): 1,
(1, 1, 3, 2): 10,
(1, 1, 3, 3): 5,
(1, 1, 3, 4): 10,
(1, 2, 3, 1): 7,
(1, 2, 3, 2): 5,
(1, 2, 3, 3): 3,
(1, 2, 3, 4): 8,
(1, 4, 5, 1): 9,
(1, 4, 5, 2): 7,
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/436682.html
上一篇:字典-僅列印部分值
