0

リスト付きの辞書を含む新しい辞書を作成したい。私のコードは次のとおりです。

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]}}

キーから空白の辞書を作成する正しい方法は何ですか?

4

1 に答える 1

1

代わりに、dictの理解を使用します。

>>> 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の値を使用するため、実際には1つの辞書しか関係していません。これは、次のことに気づきました。vreceived = 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]
于 2012-09-05T17:26:07.997 に答える