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

在循环内将列表初始化为字典中的变量

谭山
2023-03-14
问题内容

我已经在Python中工作了一段时间,并且已经使用“ try”和“ except”解决了这个问题,但是我想知道是否还有另一种方法可以解决它。

基本上我想创建一个这样的字典:

example_dictionary = {"red":[2,3,4],"blue":[6,7,8],"orange":[10,11,12]}

因此,如果我有一个具有以下内容的变量:

root_values = [{"name":"red","value":2},{"name":"red","value":3},{"name":"red","value":4},{"blue":6}...]

我实现example_dictionary的方法是:

example_dictionary = {}
for item in root_values:
   try:
       example_dictionary[item.name].append(item.value)
   except:
       example_dictionary[item.name] =[item.value]

我希望我的问题很清楚,有人可以帮助我。

谢谢。


问题答案:

您的代码未将元素追加到列表;您将列表替换为单个元素。要访问现有字典中的值,必须使用索引,而不是属性查找(item['name'],不是item.name)。

用途collections.defaultdict()

from collections import defaultdict

example_dictionary = defaultdict(list)
for item in root_values:
    example_dictionary[item['name']].append(item['value'])

defaultdict是一个dict子类,如果键在映射中尚不存在,则使用__missing__钩子dict自动实现值。

或使用dict.setdefault()

example_dictionary = {}
for item in root_values:
    example_dictionary.setdefault(item['name'], []).append(item['value'])


 类似资料:
  • 看起来很简单,但是,如何初始化 Kotlin 的以清空? 我可以用这种方式破解它,但我肯定有更简单的方法:

  • 问题内容: 我是一名基本的python程序员,因此希望我的问题的答案会很容易。我正在尝试拿字典并将其附加到列表中。然后,字典更改值,然后再次循环添加。似乎每次执行此操作时,列表中的所有词典都会更改其值以匹配刚刚添加的值。例如: 我认为结果是,但是我得到了: 任何帮助是极大的赞赏。 问题答案: 您需要追加一个 副本 ,否则您将一遍又一遍地添加对同一词典的引用: 我用和代替和; 您不想掩盖内置类型。

  • 到目前为止,这是我的代码,我很难定义字符串和UInt32从列表数组中选择的每个循环。谁能告诉我如何克服这个问题?

  • 这里有两个相同的代码,唯一的区别是我在第一个代码中使用的是在for循环内初始化的字符串,另一方面我使用的是在for循环外初始化的字符串,但得到的答案仍然不同 在for循环内初始化的字符串: 输出为以下形状: 在for循环外部初始化的字符串: 输出为以下形状: 我真的很困惑正在发生的事情,提前谢谢你。

  • 问题内容: 我在玩一些python循环。我对使用“ for”循环非常熟悉: 您还可以使用循环创建一个简单列表: 然后我最近在Stack上发现了一种不错的高效循环类型来构建一个列表(这种类型的循环有名称吗?我真的很想知道,以便可以对其进行更好地搜索): 好的,话虽如此,我想进一步讲解最后一种循环,我尝试使用相同的逻辑类型构建python字典: 而不是使用: 我在等号上收到一条错误消息,告诉我这是无效

  • 问题内容: 如何在Python中使用默认值的10倍初始化列表? 我正在寻找一种好方法来初始化具有特定范围的空列表。因此,请创建一个包含10个零或类似内容的列表,以确保我的列表具有特定长度。 问题答案: 如果您想要的“默认值”是不可变的,例如@eduffy的建议就足够了。 但是,如果您想要一个十进制的列表,请 不要 使用-这将使您的列表具有 相同的 最初为空的十倍, 而不是 十个不同的列表。而是使用