:
dicts = [dict1, dict2, dict3,...]
那麼你可以做:
dataarray = np.zeros((50,15),float)
for i, adict in enumerate(dicts):
values = current_dict.values()
for j,value in enumerate(values):
dataarray[i,j]= value
我使用enumerate
你可以用1個襯墊做到這一點得到索引號,因爲它更加Pythonic和更清潔。但是,如果dataarray
不夠大,則會出現問題。
[i,j]
是索引2d數組元素的正確方法。
我修改的剪輯對鍵沒有任何作用,所以我忽略了這些(到目前爲止)。
再次讀你的問題,我看到你想排序的關鍵。在這種情況下,我們需要使用:
items = adict.items()
# list of key,value pairs
items.sort() # may need to tweak sort parameters
for j, (key, [value) in enumerate(items):
dataarray[i,j] = value
我還沒有測試過這段代碼,所以可能會有一些bug。但大綱是正確的 - 我想。
如果您需要匹配dataarray
行中的密鑰,我們將不得不做更多的工作。
我將使用表達式像
max_dict_size = max([len(d) for d in dicts])
找到辭書的最大尺寸,並且相應地定義dataarray
。
它只是發生在我身上,我不需要迭代將字典值添加到數組。我將用一個簡單的字典來說明:
In [111]: dd={1:2.,3:4.,4:324.23} # sample dictionary
In [112]: data=np.zeros((5,2),dtype=float) # empty array
In [113]: items=dd.items()
In [114]: items
Out[114]: [(1, 2.0), (3, 4.0), (4, 324.23)]
從這個元組列表中獲取值。其實這也是一個迭代。
In [115]: values=[v for k,v in items]
In [116]: values
Out[116]: [2.0, 4.0, 324.23]
填寫data
欄。爲了更加安全,我應該使用values[:data.shape[0]
(如果data
對於本字典來說不夠大)。
In [117]: data[:len(values),0]=values
In [118]: data
Out[118]:
array([[ 2. , 0. ],
[ 4. , 0. ],
[ 324.23, 0. ],
[ 0. , 0. ],
[ 0. , 0. ]])
但是,如果所有的字典具有相同的大小,dataarray
是正確的大小,所有這些交叉檢查可以被排除在外。
你能舉一個例子嗎?所有'len'的字典都是50嗎? – vk1011
使用* dict *項目分享示例輸入? – Divakar
'dict1 = {'event1':3400,'event2':2345,'event3':7654,...}'。 @ vk1011是的,所有的字典都有'len' 50 – FaCoffee