【问题标题】:dict.fromkeys method in Python 3.2 [duplicate]Python 3.2中的dict.fromkeys方法[重复]
【发布时间】:2012-09-05 17:22:08
【问题描述】:

我想创建一个包含列表字典的新字典。我的代码是:

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

从键创建空白字典的正确方法是什么?

【问题讨论】:

    标签: python dictionary python-3.x


    【解决方案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]
    

    【讨论】:

      猜你喜欢
      • 2013-03-20
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      相关资源
      最近更新 更多