2017-04-09 39 views
1

我不太確定完成此操作的最佳方法。具有多個值的單個項目的Python數據結構

for line in lines: 
    value1 = a 
    value2 = b 
    value3 = c 

有多個字符串等於值2和值3。所以我最初的想法是創建一個字典,但鍵的初始值是用每個新值寫下來的。

我怎樣才能得到一個數據結構,看起來像:

{value1, value2 = [a,b,c], value3 = [d,e,f]} 

我可以做一組內部的列表嗎?

+3

可以使一個字典它:{ '值1':[A,B,C], '值2':[A,B,C], '值3':[d,E,F] } – Meccano

+0

我不確定請求的結構是如何與循環相關的,但根據我對您的問題的理解,完全可以在字典中存儲針對單個鍵的項目列表,例如'{value1:[a,b,c],value2:[d,e,f]}'。您可以使用與這些鍵關聯的鍵和空列表來初始化字典,然後附加到該列表,或者使用類似[defaultdict'](https://docs.python.org/2/library/collections.html #collections.defaultdict)。 – roganjosh

+0

{'value1':[a,b,c],'value2':[a,b,c],'value3':[d,e,f]}實際上是我期望創建的結構。 defaultdict指示與泥漿一樣清晰。在聲明中。什麼是「k」和「v」代表? – Rthomas529

回答

0

您可以使用defaultdict來實現此目的。然後,您可以輕鬆地根據鍵創建一個列表,並將與該鍵關聯的多個值存儲在列表中(以避免覆蓋問題)。

在基本級別上,當您定義my_dict = defaultdict(list)時,您所說的是「當爲該字典創建新密鑰時,自動爲該密鑰分配一個空列表作爲默認值。」然後您可以立即將您的值附加到存儲在該鍵上的空白列表中。如果密鑰已經存在,則其行爲與常規字典的行爲相同。

import random 
from collections import defaultdict 

choice_of_numbers = range(20) # We will pick randomly from the list and assign to dict keys 

my_dict = defaultdict(list) # Create a defaultdict 

for x in range(5): # To emulate your for line in lines loop 
    my_dict['value1'].append(random.choice(choice_of_numbers)) 
    my_dict['value2'].append(random.choice(choice_of_numbers)) 
    my_dict['value3'].append(random.choice(choice_of_numbers)) 

print(dict(my_dict)) # We call dict here just to make the appearance more familiar 
相關問題