嗨,我有這樣的 python 子字典
import torch
import torch.nn as nn
dic = {
"A": [0.2822, -0.0958, -0.5165, -0.3812,
-0.3469, 0.4025, -0.0696, -0.1246,
-0.1132, 0.4170, -0.0383, -0.4071,
-0.5407, 0.1519, 0.5630, 0.1276],
"B": [1.0014, 0.9980, 1.0012, 0.9986,
1.0001, 0.9999, 1.0016, 1.0014,
1.0008, 0.9996, 1.0008, 1.0004,
1.0000, 0.9987, 0.9997, 0.9989]
}
對于鍵 1,我有 16 個值,我想為鍵 A 制作 2 個大小為 8 的塊。這怎么可能?
就像存盤在單獨陣列中的前 8 個值和存盤在單獨陣列或字典中的后 8 個值及其鍵值一樣。如圖所示

uj5u.com熱心網友回復:
嘗試這樣的事情:
for key in dic:
dic[key "1"] = dic[key][:8] # Create A1 (or B1)
dic[key "2"] = dic[key][8:] # Create A2 (or B2)
del dic[key] # Remove A (or B)
uj5u.com熱心網友回復:
首先,我將鍵稱為鍵(即鍵“A”有 16 個值,而不是鍵 1)。將字典視為無序且只是一組鍵值對是一種很好的做法。
其次,使用 numpy 將允許我們將我們想要的密鑰分成兩個(或更多)偶陣列。如果您最終需要將 30 個元素的串列拆分為三個串列,則此代碼仍然可以使用。
import numpy as np
dic = {
"A": [0.2822, -0.0958, -0.5165, -0.3812,
-0.3469, 0.4025, -0.0696, -0.1246,
-0.1132, 0.4170, -0.0383, -0.4071,
-0.5407, 0.1519, 0.5630, 0.1276],
"B": [1.0014, 0.9980, 1.0012, 0.9986,
1.0001, 0.9999, 1.0016, 1.0014,
1.0008, 0.9996, 1.0008, 1.0004,
1.0000, 0.9987, 0.9997, 0.9989]
}
# We give array_split() our list, and how many we want it split into.
a1, a2 = np.array_split(dic['A'], 2) # We get our two lists returned.
dic['A1'] = a1.tolist() # Numpy returns it as an np.array, so let's put it back into a list.
dic['A2'] = a2.tolist()
del(dic['A']) # Remove the now unused key-value.
{'B': [1.0014, 0.998, 1.0012, 0.9986, 1.0001, 0.9999, 1.0016, 1.0014, 1.0008, 0.9996, 1.0008, 1.0004, 1.0, 0.9987, 0.9997, 0.9989],
'A1': [0.2822, -0.0958, -0.5165, -0.3812, -0.3469, 0.4025, -0.0696, -0.1246],
'A2': [-0.1132, 0.417, -0.0383, -0.4071, -0.5407, 0.1519, 0.563, 0.1276]}
uj5u.com熱心網友回復:
這有點像你要找的東西嗎?
>>> dic["A1"]=dic["A"][:8]
>>> dic["A2"]=dic["A"][8:]
>>> dic["A2"]
[-0.1132, 0.417, -0.0383, -0.4071, -0.5407, 0.1519, 0.563, 0.1276]
>>> dic["A1"]
[0.2822, -0.0958, -0.5165, -0.3812, -0.3469, 0.4025, -0.0696, -0.1246]
>>> dic
{'A': [0.2822, -0.0958, -0.5165, -0.3812, -0.3469, 0.4025, -0.0696, -0.1246, -0.1132, 0.417, -0.0383, -0.4071, -0.5407, 0.1519, 0.563, 0.1276], 'B': [1.0014, 0.998, 1.0012, 0.9986, 1.0001, 0.9999, 1.0016, 1.0014, 1.0008, 0.9996, 1.0008, 1.0004, 1.0, 0.9987, 0.9997, 0.9989], 'A1': [0.2822, -0.0958, -0.5165, -0.3812, -0.3469, 0.4025, -0.0696, -0.1246], 'A2': [-0.1132, 0.417, -0.0383, -0.4071, -0.5407, 0.1519, 0.563, 0.1276]}
>>>
uj5u.com熱心網友回復:
您可以通過將每個串列分成兩個新鍵來創建一個新字典:
from collections import ChainMap
d = {
'a': [0.2822, -0.0958, -0.5165, -0.3812,
-0.3469, 0.4025, -0.0696, -0.1246,
-0.1132, 0.4170, -0.0383, -0.4071,
-0.5407, 0.1519, 0.5630, 0.1276],
'b': [1.0014, 0.9980, 1.0012, 0.9986,
1.0001, 0.9999, 1.0016, 1.0014,
1.0008, 0.9996, 1.0008, 1.0004,
1.0000, 0.9987, 0.9997, 0.9989]
}
new_d = dict(ChainMap(
*[{f'{k}1': v[:len(v)//2], f'{k}2': v[len(v)//2:]} for k, v in d.items()]
))
print(new_d)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/410044.html
標籤:
