GVKun编程网logo

通过索引访问collections.OrderedDict中的项目(怎样通过索引来访问列表元素)

27

在这里,我们将给大家分享关于通过索引访问collections.OrderedDict中的项目的知识,让您更了解怎样通过索引来访问列表元素的本质,同时也会涉及到如何更有效地'collections.O

在这里,我们将给大家分享关于通过索引访问collections.OrderedDict中的项目的知识,让您更了解怎样通过索引来访问列表元素的本质,同时也会涉及到如何更有效地'collections.OrderedDict' 对象没有属性 'uuid' - Django REST Framework、(转)Python 3 collections.defaultdict() 与 dict的使用和区别、actionscript-3 – mx.collections丢失了吗? Flex4中的ArrayCollection()(Flash Builder 4)、AWS SAM 模板错误:collections.OrderedDict' 对象没有属性 'startswith的内容。

本文目录一览:

通过索引访问collections.OrderedDict中的项目(怎样通过索引来访问列表元素)

通过索引访问collections.OrderedDict中的项目(怎样通过索引来访问列表元素)

可以说我有以下代码:

import collectionsd = collections.OrderedDict()d[''foo''] = ''python''d[''bar''] = ''spam''

有没有一种方法可以以编号方式访问项目,例如:

d(0) #foo''s Outputd(1) #bar''s Output

答案1

小编典典

如果是OrderedDict(),则可以通过获取(key,value)对的元组的索引来轻松访问元素,如下所示

>>> import collections>>> d = collections.OrderedDict()>>> d[''foo''] = ''python''>>> d[''bar''] = ''spam''>>> d.items()[(''foo'', ''python''), (''bar'', ''spam'')]>>> d.items()[0](''foo'', ''python'')>>> d.items()[1](''bar'', ''spam'')

Python 3.X的注意事项

dict.items将返回一个可迭代的dict视图对象而不是一个列表。我们需要将调用包装到一个列表上,以使建立索引成为可能

>>> items = list(d.items())>>> items[(''foo'', ''python''), (''bar'', ''spam'')]>>> items[0](''foo'', ''python'')>>> items[1](''bar'', ''spam'')

'collections.OrderedDict' 对象没有属性 'uuid' - Django REST Framework

'collections.OrderedDict' 对象没有属性 'uuid' - Django REST Framework

如何解决''collections.OrderedDict'' 对象没有属性 ''uuid'' - Django REST Framework?

我正在使用 django-mptt 为我的 Section 模型创建一个树状结构。不幸的是,当我使用 drf-writable-nested 对其进行序列化时,出现错误。此错误仅在将 url 字段添加到序列化程序时发生。

此外,当我从自定义查找字段中删除 uuid 时,错误仅替换为 pk

我发现了这个:https://stackoverflow.com/a/55173445/9137820,但我没有直接访问任何数据,所以我不确定这可能是什么问题。

代码:

# models.py

class Section(MPTTModel,TimeStampedModel):
    uuid = models.UUIDField(default=uuid_lib.uuid4,editable=False)
    name = models.CharField(max_length=255,unique=True)
    objects = TreeManager()
    parent = TreeForeignKey(''self'',related_name=''section_children'',on_delete=models.CASCADE,null=True,blank=True)
# serializers.py

class SectionSerializer(UniqueFieldsMixin,WritablenestedModelSerializer):
    children = serializers.ListField(source=''get_children'',child=RecursiveField())

    class Meta:
        model = Section
        fields = [''url'',''uuid'',''name'',''children'']

        extra_kwargs = {
            ''url'': {''lookup_field'': ''uuid''},}
# views.py

class SectionDetail(generics.RetrieveUpdateDestroyAPIView,viewsets.GenericViewSet):
    queryset = Section.objects.all()
    serializer_class = SectionSerializer
    lookup_field = ''uuid''

追溯:

Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py",line 47,in inner
    response = get_response(request)
  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py",line 181,in _get_response
    response = wrapped_callback(request,*callback_args,**callback_kwargs)
  File "/usr/local/lib/python3.9/site-packages/django/views/decorators/csrf.py",line 54,in wrapped_view
    return view_func(*args,**kwargs)
  File "/usr/local/lib/python3.9/site-packages/rest_framework/viewsets.py",line 125,in view
    return self.dispatch(request,*args,**kwargs)
  File "/usr/local/lib/python3.9/site-packages/rest_framework/views.py",line 509,in dispatch
    response = self.handle_exception(exc)
  File "/usr/local/lib/python3.9/site-packages/rest_framework/views.py",line 469,in handle_exception
    self.raise_uncaught_exception(exc)
  File "/usr/local/lib/python3.9/site-packages/rest_framework/views.py",line 480,in raise_uncaught_exception
    raise exc
  File "/usr/local/lib/python3.9/site-packages/rest_framework/views.py",line 506,in dispatch
    response = handler(request,**kwargs)
  File "/usr/local/lib/python3.9/site-packages/rest_framework/mixins.py",line 75,in update
    return Response(serializer.data)
  File "/usr/local/lib/python3.9/site-packages/rest_framework/serializers.py",line 548,in data
    ret = super().data
  File "/usr/local/lib/python3.9/site-packages/rest_framework/serializers.py",line 246,in data
    self._data = self.to_representation(self.instance)
  File "/usr/local/lib/python3.9/site-packages/rest_framework/serializers.py",line 515,in to_representation
    ret[field.field_name] = field.to_representation(attribute)
  File "/usr/local/lib/python3.9/site-packages/rest_framework/fields.py",line 1661,in to_representation
    return [self.child.to_representation(item) if item is not None else None for item in data]
  File "/usr/local/lib/python3.9/site-packages/rest_framework/fields.py",in <listcomp>
    return [self.child.to_representation(item) if item is not None else None for item in data]
  File "/usr/local/lib/python3.9/site-packages/rest_framework/serializers.py",in to_representation
    ret[field.field_name] = field.to_representation(attribute)
  File "/usr/local/lib/python3.9/site-packages/rest_framework/relations.py",line 399,in to_representation
    url = self.get_url(value,self.view_name,request,format)
  File "/usr/local/lib/python3.9/site-packages/rest_framework/relations.py",line 335,in get_url
    lookup_value = getattr(obj,self.lookup_field)

Exception Type: AttributeError at /api/v1/sections/3b15cbda-f61e-4a00-89fb-817beed10b14/
Exception Value: ''collections.OrderedDict'' object has no attribute ''uuid''

解决方法

我做了一些挖掘,这就是我能找到的。 Dictionaries 和 OrderedDicts 不会将键和值保存为类属性。因此您无法使用 getattr() 检索它们。您需要从 dict.keys() 请求方法或属性,例如 dict.values()OrderedDict。您不能使用密钥名称。

看这个例子:

from collections import OrderedDict

g = OrderedDict()

g[''test''] = 1

g = getattr(g,''values'')

print(list(g())[0])

这很好用,但如果你改变了

g = getattr(g,''values'')

g = getattr(g,''test'')

它产生与您遇到的相同的错误

(转)Python 3 collections.defaultdict() 与 dict的使用和区别

(转)Python 3 collections.defaultdict() 与 dict的使用和区别

原文:https://www.cnblogs.com/herbert/archive/2013/01/09/2852843.html

在Python里面有一个模块collections,解释是数据类型容器模块。这里面有一个collections.defaultdict()经常被用到。主要说说这个东西。

 

综述:

这里的defaultdict(function_factory)构建的是一个类似dictionary的对象,其中keys的值,自行确定赋值,但是values的类型,是function_factory的类实例,而且具有默认值。比如default(int)则创建一个类似dictionary对象,里面任何的values都是int的实例,而且就算是一个不存在的keyd[key] 也有一个默认值,这个默认值是int()的默认值0.

 

defaultdict 
dict subclass that calls a factory function to supply missing values。

这是一个简短的解释

defaultdict属于内建函数dict的一个子类,调用工厂函数提供缺失的值。

 

比较晕,什么是工厂函数:

来自python 核心编程的解释

 

Python 2.2 统一了类型和类, 所有的内建类型现在也都是类, 在这基础之上, 原来的 
所谓内建转换函数象int(), type(), list() 等等, 现在都成了工厂函数。 也就是说虽然他 
们看上去有点象函数, 实质上他们是类。当你调用它们时, 实际上是生成了该类型的一个实 
例, 就象工厂生产货物一样。 
下面这些大家熟悉的工厂函数在老的Python 版里被称为内建函数: 
int(), long(), float(), complex() 
str(), unicode(), basestring() 
list(), tuple() 
type() 
以前没有工厂函数的其他类型,现在也都有了工厂函数。除此之外,那些支持新风格的类 
的全新的数据类型,也添加了相应的工厂函数。下面列出了这些工厂函数: 
dict() 
bool() 
set(), frozenset() 
object() 
classmethod() 
staticmethod() 
super() 
property() 
file()

 

再看看它的使用:

复制代码
import collections
s = [(''yellow'', 1), (''blue'', 2), (''yellow'', 3), (''blue'', 4), (''red'', 1)]

d = collections.defaultdict(list)
for k, v in s:
    d[k].append(v)

list(d.items())
复制代码

 

这里就开始有点明白了,原来defaultdict可以接受一个内建函数list作为参数。其实呢,list()本身是内建函数,但是再经过更新后,python里面所有东西都是对象,所以list改编成了类,引入list的时候产生一个类的实例。

 

还是不太明白,再看defaultdict的help解释

class collections.defaultdict([ default_factory[,  ...]])

Returns a new dictionary-like object. defaultdict is a subclass of the built-in dict class. It overrides one method and adds one writable instance variable. The remaining functionality is the same as for the dict class and is not documented here.

首先说了,collections.defaultdict会返回一个类似dictionary的对象,注意是类似的对象,不是完全一样的对象。这个defaultdict和dict类,几乎是一样的,除了它重载了一个方法和增加了一个可写的实例变量。(可写的实例变量,我还是没明白)

 

The first argument provides the initial value for the default_factory attribute; it defaults to None. All remaining arguments are treated the same as if they were passed to the dict constructor, including keyword arguments.

defaultdict objects support the following method in addition to the standard dict operations:

__missing__( key)

If the default_factory attribute is None, this raises a KeyError exception with the key as argument.

If default_factory is not None, it is called without arguments to provide a default value for the given key, this value is inserted in the dictionary for the key, and returned.

主要关注这个话,如果default_factory不是None, 这个default_factory将以一个无参数的形式被调用,提供一个默认值给___missing__方法的key。 这个默认值将作为key插入到数据字典里,然后返回。

十分晕。有扯出了个__missing__方法,这个__missing__方法是collections.defaultdict()的内建方法。

If calling default_factory raises an exception this exception is propagated unchanged.

This method is called by the __getitem__() method of the dict class when the requested key is not found; whatever it returns or raises is then returned or raised by __getitem__().

Note that __missing__() is not called for any operations besides __getitem__(). This means that get() will, like normal dictionaries, return None as a default rather than using default_factory.

defaultdict objects support the following instance variable:

default_factory

This attribute is used by the __missing__() method; it is initialized from the first argument to the constructor, if present, or to None, if absent.

 

看样子这个文档是难以看懂了。直接看示例:

复制代码
import collections
s = [(''yellow'', 1), (''blue'', 2), (''yellow'', 3), (''blue'', 4), (''red'', 1)]

# defaultdict
d = collections.defaultdict(list)
for k, v in s:
    d[k].append(v)

# Use dict and setdefault    
g = {}
for k, v in s:
    g.setdefault(k, []).append(v)
    


# Use dict
e = {}
for k, v in s:
    e[k] = v


##list(d.items())
##list(g.items())
##list(e.items())
复制代码

 

看看结果

复制代码
list(d.items())
[(''blue'', [2, 4]), (''red'', [1]), (''yellow'', [1, 3])]
>>> list(g.items())
[(''blue'', [2, 4]), (''red'', [1]), (''yellow'', [1, 3])]
>>> list(e.items())
[(''blue'', 4), (''red'', 1), (''yellow'', 3)]
>>> d
defaultdict(<class ''list''>, {''blue'': [2, 4], ''red'': [1], ''yellow'': [1, 3]})
>>> g
{''blue'': [2, 4], ''red'': [1], ''yellow'': [1, 3]}
>>> e
{''blue'': 4, ''red'': 1, ''yellow'': 3}
>>> d.items()
dict_items([(''blue'', [2, 4]), (''red'', [1]), (''yellow'', [1, 3])])
>>> d["blue"]
[2, 4]
>>> d.keys()
dict_keys([''blue'', ''red'', ''yellow''])
>>> d.default_factory
<class ''list''>
>>> d.values()
dict_values([[2, 4], [1], [1, 3]])
复制代码

可以看出

collections.defaultdict(list)使用起来效果和运用dict.setdefault()比较相似

python help上也这么说了

When each key is encountered for the first time, it is not already in the mapping; so an entry is automatically created using the default_factory function which returns an empty list. The list.append() operation then attaches the value to the new list. When keys are encountered again, the look-up proceeds normally (returning the list for that key) and the list.append() operation adds another value to the list. This technique is simpler and faster than an equivalent technique using dict.setdefault():

 

说这种方法会和dict.setdefault()等价,但是要更快。

有必要看看dict.setdefault()

setdefault( key[,  default])

If key is in the dictionary, return its value. If not, insert key with a value of default and return defaultdefault defaults to None.

如果这个key已经在dictionary里面存着,返回value.如果key不存在,插入key和一个default value,返回Default. 默认的defaults是None.

 

但是这里要注意的是defaultdict是和dict.setdefault等价,和下面那个直接赋值是有区别的。从结果里面就可以看到,直接赋值会覆盖。

 

从最后的d.values还有d[“blue”]来看,后面的使用其实是和dict的用法一样的,唯一不同的就是初始化的问题。defaultdict可以利用工厂函数,给初始keyi带来一个默认值。

这个默认值也许是空的list[]  defaultdict(list), 也许是0, defaultdict(int).

 

再看看下面的这个例子。

defaultdict(int) 这里的d其实是生成了一个默认为0的带key的数据字典。你可以想象成 d[key] = int default (int工厂函数的默认值为0)

 

d[k]所以可以直接读取 d[“m”] += 1 就是d[“m”] 就是默认值 0+1 = 1

后面的道理就一样了。

 

复制代码
>>> s = ''mississippi''
>>> d = defaultdict(int)
>>> for k in s:
...     d[k] += 1
...
>>> list(d.items())
[(''i'', 4), (''p'', 2), (''s'', 4), (''m'', 1)]
复制代码
伪python爱好者,正宗测试实践者。

actionscript-3 – mx.collections丢失了吗? Flex4中的ArrayCollection()(Flash Builder 4)

actionscript-3 – mx.collections丢失了吗? Flex4中的ArrayCollection()(Flash Builder 4)

我有一些使用ArrayCollection的代码,它导入:

import mx.collections.ArrayCollection;

然后:

static protected var myAC:ArrayCollection = new ArrayCollection();

看起来很简单,但在我的项目中,找不到/定义了导入(以及ArrayCollection)!

我使用的是Flash Builder 4(Flex 4) – 它是一个ActionScript项目,项目属性设置为Flex SDK 4.0.一切都应该是默认设置.

当我输入“import mx”时.并按控制空间(自动完成),我看到一个选项列表,如核心,几何和其他几个,但没有’集合’.

我肯定错过了什么?

解决方法

>将项目导出为zip >更新到FlashBuilder 4.1 >从zip导入项目 >忘记你的错误)

AWS SAM 模板错误:collections.OrderedDict' 对象没有属性 'startswith

AWS SAM 模板错误:collections.OrderedDict' 对象没有属性 'startswith

如何解决AWS SAM 模板错误:collections.OrderedDict'' 对象没有属性 ''startswith?

我在使用 SAM 模板部署资源时遇到此错误

下面是脚本 - sam 包 --template-file test.json --s3-bucket $s3_bucket --s3-prefix 包/my_folder/ --output-template-file samtemplate.yml

在回滚到以前的工作状态后甚至尝试出现此错误

返回 any([url.startswith(prefix) for prefix in ["s3://","http://","https://"]]) 文件“/usr/local/lib/python3.8/site-packages/samcli/lib/providers/sam_stack_provider.py”,第250行,在 return any([url.startswith(prefix) for prefix in ["s3://","https://"]]) AttributeError: ''collections.OrderedDict'' 对象没有属性 ''startswith''

添加一些调试消息后,我收到此错误 2021-04-22 06:42:32,820 |无法解析属性 S3bucketname: OrderedDict([(''Fn::Select'',[''0'',OrderedDict([(''Fn::Split'',[''/'',OrderedDict([(''Ref'',''TemplateS3BucketName'') ])])])])])。保持原样。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

今天关于通过索引访问collections.OrderedDict中的项目怎样通过索引来访问列表元素的分享就到这里,希望大家有所收获,若想了解更多关于'collections.OrderedDict' 对象没有属性 'uuid' - Django REST Framework、(转)Python 3 collections.defaultdict() 与 dict的使用和区别、actionscript-3 – mx.collections丢失了吗? Flex4中的ArrayCollection()(Flash Builder 4)、AWS SAM 模板错误:collections.OrderedDict' 对象没有属性 'startswith等相关知识,可以在本站进行查询。

本文标签: