2012-09-05 23 views
0

我想創建一個新的詞典,其中包含一個帶有列表的詞典。我的代碼是:Python 3.2中的dict.fromkeys方法

SERVICES = "FTP Download", "FTP Upload", "HTTP" 
received = dict.fromkeys(SERVICES , {'MS1':[]}) 
n = 0 
for service in SERVICES: 
    received[service]['MS1'].append(n) 
    n += 1 
print(received) 

我得到了什麼。儘管我使用了不同的密鑰,但我在每本字典中都有相同的列表。

我的輸出是:{'FTP Download': {'MS1': [0, 1, 2]}, 'HTTP': {'MS1': [0, 1, 2]}, 'FTP Upload': {'MS1': [0, 1, 2]}}

什麼是創建密鑰的空白詞典的正確方法?

回答

1

我會簡單地使用字典理解,而不是:

>>> SERVICES = "FTP Download", "FTP Upload", "HTTP" 
>>> received = {k: {'MS1': []} for k in SERVICES} 
>>> received 
{'FTP Download': {'MS1': []}, 'HTTP': {'MS1': []}, 'FTP Upload': {'MS1': []}} 
>>> received["HTTP"]["MS1"].append(17) 
>>> received 
{'FTP Download': {'MS1': []}, 'HTTP': {'MS1': [17]}, 'FTP Upload': {'MS1': []}} 

由於fromkeys使用值v每個鍵,在received = dict.fromkeys(SERVICES , {'MS1':[]})有真的只有一個MS1字典參與,這是你注意到了什麼:

>>> received = dict.fromkeys(SERVICES , {'MS1':[]}) 
>>> received.values() 
dict_values([{'MS1': []}, {'MS1': []}, {'MS1': []}]) 
>>> [id(v) for v in received.values()] 
[141458940, 141458940, 141458940]