GVKun编程网logo

在Python中执行列表/字典理解时可以访问当前对象吗?(python字典中字典的访问)

14

在这里,我们将给大家分享关于在Python中执行列表/字典理解时可以访问当前对象吗?的知识,让您更了解python字典中字典的访问的本质,同时也会涉及到如何更有效地Django可以访问views.py

在这里,我们将给大家分享关于在Python中执行列表/字典理解时可以访问当前对象吗?的知识,让您更了解python字典中字典的访问的本质,同时也会涉及到如何更有效地Django可以访问views.py中当前对象的外键、Python 3中的字典理解、python – 三重嵌套字典理解?、Python-我可以访问调用我的对象吗?的内容。

本文目录一览:

在Python中执行列表/字典理解时可以访问当前对象吗?(python字典中字典的访问)

在Python中执行列表/字典理解时可以访问当前对象吗?(python字典中字典的访问)

试图想到一种方法来实现以下目的(将键的所有值相加):

>>> data = [(''a'',1),(''b'',3),(''a'',4),(''c'',9),(''b'',1),(''d'',3)]>>> res = {}>>> for tup in data:...     res[tup[0]] = res.setdefault(tup[0],0) + tup[1]... >>> res{''a'': 5, ''c'': 9, ''b'': 4, ''d'': 3}

一线版,不使用itertools,collection等任何导入。

 { tup[0] : SELF_REFERENCE.setdefault(tup[0],0) + tup[1]  for tup in data }

在Python中是否可以使用对当前正在理解的对象的引用?如果没有,有没有办法在不使用任何导入的情况下以单行方式实现这一目标,即使用基本列表/字典理解和内置函数。

答案1

小编典典

不,那里没有。dict理解会为每次迭代生成一个 项目,并且您的代码需要生成 更少的 项目(合并值)。

没有不使用(难看的,非pythonic的)副作用技巧,就无法访​​问早期迭代中生成的密钥。dict理解所要产生的对象尚不存在,因此也无法产生自引用。

只需坚持自己的for循环,它就会更具可读性。

另一种选择是使用排序和分组,O(NlogN)算法与直接循环的简单O(N):

from itertools import groupbyfrom operator import itemgetterres = {key: sum(t[1] for t in group)        for key, group in groupby(sorted(data, key=itemgetter(0)), key=itemgetter(0))}

Django可以访问views.py中当前对象的外键

Django可以访问views.py中当前对象的外键

如何解决Django可以访问views.py中当前对象的外键?

我有三个模型:

Class Collection(models.Model):
    var_1 = .....
    var_2 = ....

Class Titles(models.Model):
    var_a = models.ForeignKey(Collection,related_name="has_titles",on_delete=models.CASCADE)
    var_b = ...

Class OtherObject(models.Model):
    var_x = models.ForeignKey(Collection,related_name="has_other_object",on_delete=models.CASCADE)
    var_y = ...

在 views.py 中,我使用带有表单的 CBV DetailView(然后使用 formMixin 或 MultipleFormsMixin,但这不是重点)。

所以基本上每个标题都通过外键链接到集合,每个其他对象也通过外键链接到集合。

因此,当用户处于 Title 模型的详细信息页面中时,他可以填写表单以添加其他对象,然后该对象将显示在链接到 Title 的 Collection detailView 上。

换句话说,我想要的是当前标题的 var_x = var_a :

if form.is_valid():
    new_other_object = form.save(commit=False)
    new_other_object.var_x = HERE I WANT TO GET var_a OF CURRENT OBJECT
    new_other_object.save()

因此,由于 Title 有一个 ForeignKey,其中包含它所属的 Collection 的 ID,我尝试使用诸如 self.get_object() 之类的东西。我读过诸如使用 self.get_object().var_a 之类的东西可以工作,但是使用我尝试过的所有不同解决方案,我都遇到了错误,主要是提到该对象必须是 Collection 实例的错误。

您将如何实现这一目标?

谢谢。

解决方法

你只需要创建一个查询集: new_other_object.var_x = Title.objects.get(pk=form[''id'']) 这样你就得到了将成为外键的对象,然后插入外键字段,然后保存,应该可以工作

Python 3中的字典理解

Python 3中的字典理解

我在Python2.7和中找到了以下有关dict理解的堆栈溢出文章Python3+:在Python中用列表理解创建字典,说明我可以像这样应用字典理解:

d = {key: value for (key, value) in sequence}

我在Python 3中尝试过。但是,它引发了一个异常。

d = {''a'':1, ''b'':2, ''c'':3, ''d'':4}{key : value for (key, value) in d}{key : value for key, value in d}

两种版本都提出了ValueError这样的说法ValueError: need more than 1 value to unpack

在Python3中进行字典理解的最简单/最直接的方法是什么?

答案1

小编典典

遍历字典只会产生 。使用d.items()循环遍历键和值:

{key: value for key, value in d.items()}

ValueError您看到的异常 不是 dict理解问题,也不限于Python 3。您会在Python 2或常规for循环中看到相同的问题:

>>> d = {''a'':1, ''b'':2, ''c'':3, ''d'':4}>>> for key, value in d:...     print key, value... Traceback (most recent call last):  File "<stdin>", line 1, in <module>ValueError: need more than 1 value to unpack

因为每次迭代仅产生 一项

如果不进行转换,{k: v for k, v ind.items()}则只是冗长而昂贵的d.copy();仅当您对键或值进行更多操作,使用条件或更复杂的循环构造时,才使用dict理解。

python – 三重嵌套字典理解?

python – 三重嵌套字典理解?

假设我有一个熊猫系列,像这样:

import pandas as pd
s = pd.Series(["hello go home bye bye","you can't always get","what you waaaaaaant","apple banana carrot munch 123"])

我想创建一个字典,其中单个字符作为键,其频率作为值.在集合的帮助下,为过去的单词创建这些词典很容易.计数器:

from collections import Counter
c = Counter(word for row in s for word in row.lower().split())

但是,我现在正在尝试存储单个字符,并且在三嵌套字典理解方面存在一些问题.这就是我所拥有的:

c = Counter((letter for letter in word) for word for row in s for word in row.lower().split())

这给了我一个语法错误.如何在一行中创建等效的以下for循环?

d = {}
for row in s:
    for word in row.lower().split():
        for letter in word:
            d[letter] += 1

解决方法

我想你可以用

Counter([j for i in s for j in i])
Counter({'a': 16,' ': 13,'e': 6,'o': 6,'n': 5,'t': 5,'y': 5,'h': 4,'l': 4,'c': 3,'b': 3,'u': 3,'w': 3,'g': 2,'m': 2,'p': 2,'r': 2,"'": 1,'1': 1,'3': 1,'2': 1,'s': 1})

获得个人字符数.

Python-我可以访问调用我的对象吗?

Python-我可以访问调用我的对象吗?

如果我有这个:

class A:    def callFunction(self, obj):        obj.otherFunction()class B:    def callFunction(self, obj):        obj.otherFunction()class C:    def otherFunction(self):        # here I wan''t to have acces to the instance of A or B who call me....# in main or other object (not matter where)a = A()b = B()c = C()a.callFunction(c) # How ''c'' know that is called by an instance of A...b.callFunction(c) # ... or B

尽管有设计或其他问题,但这只是一个有疑问的问题。

注意:必须在不更改 签名的 情况下完成此操作otherFunction __

答案1

小编典典

如果这是出于调试目的,则可以使用inspect.currentframe():

import inspectclass C:    def otherFunction(self):        print inspect.currentframe().f_back.f_locals

这是输出:

>>> A().callFunction(C()){''self'': <__main__.A instance at 0x96b4fec>, ''obj'': <__main__.C instance at 0x951ef2c>}

关于在Python中执行列表/字典理解时可以访问当前对象吗?python字典中字典的访问的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Django可以访问views.py中当前对象的外键、Python 3中的字典理解、python – 三重嵌套字典理解?、Python-我可以访问调用我的对象吗?等相关内容,可以在本站寻找。

本文标签: