【问题标题】:Python: How to append list item to dictionary if item equals key?Python:如果项目等于键,如何将列表项附加到字典?
【发布时间】:2020-04-10 15:46:19
【问题描述】:

我正在尝试遍历列表,如果列表项等于字典键,则将列表项附加到字典中。

mylist = [1, 2, 3]

mydict = dict.fromkeys(mylist, [])

for item in mylist:
    for key in mydict:
        if key == item:
            mydict[key].append(item)

print(mydict)

输出:

{1: [1, 2, 3], 2: [1, 2, 3], 3: [1, 2, 3]}

需要的输出:

{1: [1], 2: [2], 3: [3]}

非常感谢!

【问题讨论】:

标签: python dictionary


【解决方案1】:

因为这里:

mydict = dict.fromkeys(mylist, [])

mydict 的值将是同一个对象 [],因此当您追加到mydict[something] 时,您将追加到同一个列表 ,不管something是什么。

所有值都是同一个对象,你给它附加三个数字 => 所有值都显示为同一个列表。

为避免这种情况,请为每个键分配 列表:

mydict = {}
for item in mylist:
    mydict.setdefault(item, []).append(item)

或者,你知道:

mydict = {key: [key] for key in mylist}

【讨论】:

    【解决方案2】:

    通过使用:

    mylist = [1, 2, 3]
    
    mydict = dict.fromkeys(mylist, [])
    

    您正在创建一个 dict,其中包含来自 mylist 的所有元素作为键,并且您的 dict 中的所有值都是对同一列表的引用,要修复您可以使用:

    mydict = dict.fromkeys(mylist)
    
    for item in mylist:
        mydict[item] = [item]
    
    print(mydict)
    

    输出:

    {1: [1], 2: [2], 3: [3]}
    

    同样的事情,但通过使用字典理解以更高效和紧凑的形式:

    mydict = {item: [item] for item in mylist}
    

    【讨论】:

      【解决方案3】:

      这是你想要的吗?

      mylist = [1,2,3,3]
      mydict = {}
      for item in mylist:
          if item not in mydict:
              mydict[item] = [item]
          else:
              mydict[item].append(item)
      print(mydict)
      

      它将输出:{1: [1], 2: [2], 3: [3, 3]}

      【讨论】:

        【解决方案4】:
        mylist = [1, 2, 3]
        
        mydict = dict.fromkeys(mylist, [])
        
        for item in mylist:
            for key in mydict:
                if key == item:
                    mydict[key] = [item]
        
        print(mydict)
        

        【讨论】:

        • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常质量更高,更有可能吸引投票。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-19
        • 2015-08-22
        • 2021-07-02
        • 1970-01-01
        • 2021-12-25
        • 2013-12-24
        • 1970-01-01
        相关资源
        最近更新 更多