当前位置: 首页 > 面试题库 >

将值附加到字典中的一个列表将值附加到字典中的所有列表

长孙深
2023-03-14
问题内容

问题

我正在以以下方式创建一个空列表作为值的字典。

>>> words = dict.fromkeys(['coach', 'we', 'be'], [])

字典看起来像这样。

>>> words
{'coach': [], 'be': [], 'we': []}

当我将一个值附加到一个列表时,此示例将值附加到所有列表。

>>> words['coach'].append('test')
{'coach': ['test'], 'be': ['test'], 'we': ['test']}

问题

我的问题分为两部分。首先,为什么会这样?第二,我该怎么办?也就是说,如何将一个值仅附加到一个列表中?

我想象在创建字典时,我使所有列表都指向同一个对象。但是我不明白怎么回事,因为当我输入0而不是[]在字典创建中,然后添加值而不是附加值时,这些值的行为会不同,就好像它们指向不同的对象一样。

我将不胜感激。先感谢您!


问题答案:

dict.fromkeys对所有值使用 相同的对象 ,在这种情况下为mutable列表…这意味着,所有键共享
同一个空列表…当您尝试对.append一个列表的值进行更改时,将对对象进行就地更改,因此所有引用它的人都可以看到它的更改。

如果不是,则使用dict-comp,例如:{k:[] for k in ['could', 'we', 'be']}每个[]都是 不同的空列表
,因此每个键值都是唯一的,并且可以按预期工作。

关于使用dict.fromkeys(['a', 'b', 'c'], 0)0是一个 不可变的
对象,因此不受该陷阱的困扰,因为对其的更改会导致新对象,而不是对不同名称(在这种情况下-不同键的值)可能共享的基础对象的更改。



 类似资料:
  • 问题内容: 有没有更优雅的方式来编写此代码? 我在做什么:我有键和日期。可能有多个日期分配给键,因此我正在创建一个包含日期列表的字典来表示这一点。以下代码可以正常工作,但是我希望有一个更优雅和Pythonic的方法。 我期望下面的工作,但我不断得到一个NoneType没有属性附加错误。 这可能与以下事实有关: 但为什么? 问题答案: 返回,因为它是就地操作,并且您将其分配回。因此,下一次您实际要做

  • 给一本字典: 如何将键附加到列表中? 我走了这么远:

  • 问题内容: 这个问题不太可能对将来的访客有所帮助;它仅与较小的地理区域,特定的时间段或极为狭窄的情况相关,通常不适用于Internet的全球受众。要获得使该问题更广泛适用的帮助,请访问帮助中心。 8年前关闭。 PHP有一种非常快速的方法将值附加到数组: 在python中不需要索引号的最简单方法是什么?另外,有没有一种简单的方法可以使用嵌套在字典中的列表来执行此操作,例如此PHP等效项。 问题答案:

  • 我正在导入一个文本文件,该文件将行星与其状态关联为True(对于行星),或False(对于矮星),其顺序必须与下面的字典键相同。 这是一本名为“索尔”的字典: {‘天王星’:[275030002880],‘水星’:[46,70,57],‘地球’:[147152150],‘金星’:[107109108],‘火星’:[205249228],‘土星’:[13501510140],‘木星’:[741817

  • 问题内容: 我是python的新手,我列出了每年的年份和值。我想做的是检查字典中是否已经存在年份,如果存在,则将值附加到特定键的值列表中。 例如,我有一个年份列表,每年都有一个值: 我想做的是用年作为键填充那些字典,而那些数字作为值填充字典。但是,如果我两次列出了2009,那么我想将该第二个值追加到该词典中的值列表中,因此我想: 现在,我有以下内容: 问题答案: 如果我可以重新表述您的问题,您想要

  • 问题内容: 我试图弄清楚如何在Python中将多个值附加到列表中。我知道很少有方法可以做到这一点,例如手动输入值或将附加操作放入循环中,或和函数。 但是,我想知道是否还有更整齐的方法?也许某个程序包或功能? 问题答案: 您可以使用sequence方法将列表从任意迭代类型中扩展为多个值,无论是另一个列表还是提供值序列的任何其他事物。 因此,您可以用来附加 单个 值,也可以附加 多个 值。