相关疑难解决方法(0)

dict.items()和dict.iteritems()有什么区别?

dict.items()和之间是否有任何适用的差异dict.iteritems()

从Python文档:

dict.items():返回字典的(键,值)对列表的副本.

dict.iteritems():在字典(键,值)对上返回一个迭代器.

如果我运行下面的代码,每个似乎都返回对同一对象的引用.我缺少哪些微妙的差异?

#!/usr/bin/python

d={1:'one',2:'two',3:'three'}
print 'd.items():'
for k,v in d.items():
   if d[k] is v: print '\tthey are the same object' 
   else: print '\tthey are different'

print 'd.iteritems():'   
for k,v in d.iteritems():
   if d[k] is v: print '\tthey are the same object' 
   else: print '\tthey are different'   
Run Code Online (Sandbox Code Playgroud)

输出:

d.items():
    they are the same object
    they are the same object
    they are the same object
d.iteritems():
    they are the same …
Run Code Online (Sandbox Code Playgroud)

python dictionary python-2.x

673
推荐指数
6
解决办法
64万
查看次数

像属性一样访问dict键?

我发现访问dict密钥更加方便,obj.foo而不是obj['foo'],所以我写了这个代码片段:

class AttributeDict(dict):
    def __getattr__(self, attr):
        return self[attr]
    def __setattr__(self, attr, value):
        self[attr] = value
Run Code Online (Sandbox Code Playgroud)

但是,我认为必须有一些原因,Python不提供开箱即用的功能.以这种方式访问​​dict密钥有什么警告和陷阱?

python syntax dictionary

273
推荐指数
16
解决办法
16万
查看次数

如何将JSON数据转换为Python对象

我想使用Python将JSON数据转换为Python对象.

我从Facebook API接收JSON数据对象,我想将其存储在我的数据库中.

我目前在Django中查看(Python)(request.POST包含JSON):

response = request.POST
user = FbApiUser(user_id = response['id'])
user.name = response['name']
user.username = response['username']
user.save()
Run Code Online (Sandbox Code Playgroud)
  • 这工作正常,但我如何处理复杂的JSON数据对象?

  • 如果我能以某种方式将这个JSON对象转换为Python对象以便于使用,那会不会更好?

python django json

242
推荐指数
15
解决办法
36万
查看次数

如何使用点"." 访问字典成员?

如何通过点"."访问Python字典成员?

例如,mydict['val']我不想写作,而是写作mydict.val.

此外,我想以这种方式访问​​嵌套的dicts.例如

mydict.mydict2.val 
Run Code Online (Sandbox Code Playgroud)

会参考

mydict = { 'mydict2': { 'val': ... } }
Run Code Online (Sandbox Code Playgroud)

python syntax dictionary nested

230
推荐指数
17
解决办法
13万
查看次数

如何动态地向类添加属性?

目标是创建一个类似于db结果集的模拟类.

因此,例如,如果数据库查询使用dict表达式返回{'ab':100, 'cd':200},那么我想看到:

>>> dummy.ab
100
Run Code Online (Sandbox Code Playgroud)

起初我想也许我可以这样做:

ks = ['ab', 'cd']
vs = [12, 34]
class C(dict):
    def __init__(self, ks, vs):
        for i, k in enumerate(ks):
            self[k] = vs[i]
            setattr(self, k, property(lambda x: vs[i], self.fn_readyonly))

    def fn_readonly(self, v)
        raise "It is ready only"

if __name__ == "__main__":
    c = C(ks, vs)
    print c.ab
Run Code Online (Sandbox Code Playgroud)

但是c.ab返回一个属性对象.

更换setattr线路k = property(lambda x: vs[i])完全没用.

那么在运行时创建实例属性的正确方法是什么?

PS我知道如何__getattribute__使用该方法?

python monkeypatching runtime properties

193
推荐指数
11
解决办法
19万
查看次数

如何解析/读取YAML文件到Python对象?

如何解析/读取YAML文件到Python对象?

例如,这个YAML:

Person:
  name: XYZ
Run Code Online (Sandbox Code Playgroud)

对于这个Python类:

class Person(yaml.YAMLObject):
  yaml_tag = 'Person'

  def __init__(self, name):
    self.name = name
Run Code Online (Sandbox Code Playgroud)

我顺便使用PyYAML.

python parsing yaml

96
推荐指数
2
解决办法
15万
查看次数

我应该使用课程还是字典?

我有一个只包含字段而没有方法的类,如下所示:

class Request(object):

    def __init__(self, environ):
        self.environ = environ
        self.request_method = environ.get('REQUEST_METHOD', None)
        self.url_scheme = environ.get('wsgi.url_scheme', None)
        self.request_uri = wsgiref.util.request_uri(environ)
        self.path = environ.get('PATH_INFO', None)
        # ...
Run Code Online (Sandbox Code Playgroud)

这很容易被翻译成一个字典.该课程对于未来的添加更加灵活,可以快速使用__slots__.那么使用dict会有好处吗?一个dict会比一个班级快吗?比带插槽的课程更快?

python oop dictionary class

85
推荐指数
6
解决办法
4万
查看次数

在Python中解析YAML文件并访问数据?

我是YAML的新手,一直在寻找解析YAML文件和使用/访问解析后的YAML数据的方法.

我遇到了关于如何解析YAML文件的解释,例如,PyYAML 教程," 我如何在Python中解析YAML文件 "," 将Python dict转换为对象? ",但我没有找到的是关于如何从解析的YAML文件访问数据的简单示例.

假设我有一个YAML文件,例如:

 treeroot:
     branch1: branch1 text
     branch2: branch2 text
Run Code Online (Sandbox Code Playgroud)

如何访问"branch1 text"文本?

" YAML解析和Python? "提供了一个解决方案,但是我在从更复杂的YAML文件访问数据时遇到了问题.而且,我想知道是否有一些标准的方法从解析的YAML文件访问数据,可能类似于" 树迭代 "或" 元素路径 "符号或解析XML文件时将使用的东西?

python xml parsing yaml

74
推荐指数
2
解决办法
10万
查看次数

如何在python中使用dict的点符号?

我是python的新手,我希望我能用.符号来访问a的值dict.

让我们说我test喜欢这样:

>>> test = dict()
>>> test['name'] = 'value'
>>> print(test['name'])
value
Run Code Online (Sandbox Code Playgroud)

但是,我希望我能做到test.namevalue.事实上,我通过覆盖__getattr__我的类中的方法来做到这一点:

class JuspayObject:

    def __init__(self,response):
        self.__dict__['_response'] = response

    def __getattr__(self,key): 
        try:
            return self._response[key]
        except KeyError,err:
            sys.stderr.write('Sorry no key matches')
Run Code Online (Sandbox Code Playgroud)

这很有效!当我做:

test.name // I get value.
Run Code Online (Sandbox Code Playgroud)

但问题是当我test单独打印时,我得到的错误是:

'Sorry no key matches'
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

python dictionary nested

53
推荐指数
8
解决办法
6万
查看次数

使用Python类作为数据容器

有时将相关数据聚集在一起是有意义的.我倾向于用dict这样做,例如,

self.group = dict(a=1, b=2, c=3)
print self.group['a']
Run Code Online (Sandbox Code Playgroud)

我的一位同事更喜欢创建一个班级

class groupClass(object):
    def __init__(a, b, c):
        self.a = a
        self.b = b
        self.c = c
self.group = groupClass(1, 2, 3)
print self.group.a
Run Code Online (Sandbox Code Playgroud)

请注意,我们没有定义任何类方法.

我喜欢使用dict,因为我喜欢最小化代码行数.我的同事认为如果使用类,代码更具可读性,并且将来更容易向类中添加方法.

你更喜欢哪个?为什么?

python struct dictionary class

48
推荐指数
8
解决办法
5万
查看次数