2 回答

TA貢獻(xiàn)1911條經(jīng)驗 獲得超7個贊
您需要為每行創(chuàng)建一個新的列表對象,然后替換原始列表值:
def row_to_values(row):
values = []
for col in row:
if isinstance(col, unicode) and col != u'f':
# split and convert all entries to float
values += (float(v) for v in col.split(','))
else:
values.append(col)
return values
for value in data.values():
value[:] = [row_to_values(row) for row in value]
該value[:] = ...分配告訴Python來代替包含的所有指標(biāo)中的列表對象具有一組新的對象。由于每個value列表都是data詞典中的外部列表,因此將所有子列表替換為擴(kuò)展的行。
演示部分樣本數(shù)據(jù):
>>> data = {"technology1": [
... [
... 20, 0.02,
... u'10.00,106.10,107.00,107.00,0.45',
... u'24.00,-47.15,-49.50,-51.00,0.12',
... u'11.00,0.35,0.00,0.00,0.92',
... u'0.00',0.04,0.16, u'0.223196881092', u'f',0.02,
... ],
... [
... 100, 0.02,
... u'10.00,106.10,107.00,107.00,0.45',
... u'24.00,-47.15,-49.50,-51.00,0.12',
... u'11.00,0.35,0.00,0.00,0.92', u'0.00', 0.04,
... 0.16, u'0.223196881092', u'f', 0.01
... ]],
... }
>>> from pprint import pprint
>>> pprint(data["technology1"][0])
[20,
0.02,
u'10.00,106.10,107.00,107.00,0.45',
u'24.00,-47.15,-49.50,-51.00,0.12',
u'11.00,0.35,0.00,0.00,0.92',
u'0.00',
0.04,
0.16,
u'0.223196881092',
u'f',
0.02]
>>> pprint(row_to_values(data["technology1"][0]))
[20,
0.02,
10.0,
106.1,
107.0,
107.0,
0.45,
24.0,
-47.15,
-49.5,
-51.0,
0.12,
11.0,
0.35,
0.0,
0.0,
0.92,
0.0,
0.04,
0.16,
0.223196881092,
u'f',
0.02]
因此,可以通過返回新列表對象的函數(shù)調(diào)用來擴(kuò)展一行,使其包含字符串中的所有浮點值。
使用該函數(shù)替換所有字典值中的所有行:
>>> for value in data.values():
... value[:] = [row_to_values(row) for row in value]
...
我們可以看到之前查看的第一行已更新:
>>> pprint(data["technology1"][0])
[20,
0.02,
10.0,
106.1,
107.0,
107.0,
0.45,
24.0,
-47.15,
-49.5,
-51.0,
0.12,
11.0,
0.35,
0.0,
0.0,
0.92,
0.0,
0.04,
0.16,
0.223196881092,
u'f',
0.02]
字典的其余部分也是如此:
>>> pprint(data)
{'technology1': [[20,
0.02,
10.0,
106.1,
107.0,
107.0,
0.45,
24.0,
-47.15,
-49.5,
-51.0,
0.12,
11.0,
0.35,
0.0,
0.0,
0.92,
0.0,
0.04,
0.16,
0.223196881092,
u'f',
0.02],
[100,
0.02,
10.0,
106.1,
107.0,
107.0,
0.45,
24.0,
-47.15,
-49.5,
-51.0,
0.12,
11.0,
0.35,
0.0,
0.0,
0.92,
0.0,
0.04,
0.16,
0.223196881092,
u'f',
0.01]]}
添加回答
舉報