小编典典

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

python

我已经在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]

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

谢谢。


阅读 200

收藏
2020-12-20

共1个答案

小编典典

您的代码未将元素追加到列表;您将列表替换为单个元素。要访问现有字典中的值,必须使用索引,而不是属性查找(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'])
2020-12-20