阅读Python 3.1中的更改,我发现了一些......意外的:
sys.version_info元组现在是一个命名元组:
我之前从未听说过命名元组,我认为元素可以用数字(如元组和列表)或键(如dicts)索引.我从没想过他们可以两种方式编入索引.
因此,我的问题是:
我正在寻找一种优雅的方法,使用一些嵌套的dicts和列表(即javascript样式的对象语法)在dict上使用属性访问来获取数据.
例如:
>>> d = {'a': 1, 'b': {'c': 2}, 'd': ["hi", {'foo': "bar"}]}
Run Code Online (Sandbox Code Playgroud)
应该可以通过这种方式访问:
>>> x = dict2obj(d)
>>> x.a
1
>>> x.b.c
2
>>> x.d[1].foo
bar
Run Code Online (Sandbox Code Playgroud)
我认为,如果没有递归,这是不可能的,但是什么是获得dicts的对象样式的好方法?
有没有办法在Python中方便地定义类似C的结构?我厌倦了写下这样的东西:
class MyStruct():
def __init__(self, field1, field2, field3):
self.field1 = field1
self.field2 = field2
self.field3 = field3
Run Code Online (Sandbox Code Playgroud) 如何通过点"."访问Python字典成员?
例如,mydict['val']
我不想写作,而是写作mydict.val
.
此外,我想以这种方式访问嵌套的dicts.例如
mydict.mydict2.val
Run Code Online (Sandbox Code Playgroud)
会参考
mydict = { 'mydict2': { 'val': ... } }
Run Code Online (Sandbox Code Playgroud) 我需要使用Python3 读取,编写和创建一个INI文件.
FILE.INI
default_path = "/path/name/"
default_file = "file.txt"
Run Code Online (Sandbox Code Playgroud)
Python文件:
# Read file and and create if it not exists
config = iniFile( 'FILE.INI' )
# Get "default_path"
config.default_path
# Print (string)/path/name
print config.default_path
# Create or Update
config.append( 'default_path', 'var/shared/' )
config.append( 'default_message', 'Hey! help me!!' )
Run Code Online (Sandbox Code Playgroud)
更新的 FILE.INI
default_path = "var/shared/"
default_file = "file.txt"
default_message = "Hey! help me!!"
Run Code Online (Sandbox Code Playgroud) 有时将相关数据聚集在一起是有意义的.我倾向于用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,因为我喜欢最小化代码行数.我的同事认为如果使用类,代码更具可读性,并且将来更容易向类中添加方法.
你更喜欢哪个?为什么?
我的班级有一个词典,例如:
class MyClass(object):
def __init__(self):
self.data = {'a': 'v1', 'b': 'v2'}
Run Code Online (Sandbox Code Playgroud)
然后我想使用dict的密钥和MyClass实例来访问dict,例如:
ob = MyClass()
v = ob.a # Here I expect ob.a returns 'v1'
Run Code Online (Sandbox Code Playgroud)
我知道这应该由__getattr__实现,但我是Python的新手,我不知道如何实现它.
如果我导入或创建一个不包含空格的pandas列,我可以这样访问它:
df1 = DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],
'data1': range(7)})
df1.data1
Run Code Online (Sandbox Code Playgroud)
这将为我返回该系列.但是,如果该列的名称中有空格,则无法通过该方法访问该列:
df2 = DataFrame({'key': ['a','b','d'],
'data 2': range(3)})
df2.data 2 # <--- not the droid i'm looking for.
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用.xs()访问它:
df2.xs('data 2', axis=1)
Run Code Online (Sandbox Code Playgroud)
还有的有是另一种方式.我用谷歌搜索它疯了,想不出任何其他方式谷歌它.我在这里阅读了包含"column","string"和"pandas"的所有96条目,并且找不到以前的答案.这是唯一的方法,还是有更好的东西?
谢谢!
我希望能够做到这样的事情:
from dotDict import dotdictify
life = {'bigBang':
{'stars':
{'planets': []}
}
}
dotdictify(life)
# This would be the regular way:
life['bigBang']['stars']['planets'] = {'earth': {'singleCellLife': {}}}
# But how can we make this work?
life.bigBang.stars.planets.earth = {'singleCellLife': {}}
#Also creating new child objects if none exist, using the following syntax:
life.bigBang.stars.planets.earth.multiCellLife = {'reptiles':{},'mammals':{}}
Run Code Online (Sandbox Code Playgroud)
我的动机是改进代码的简洁性,如果可能的话,使用与Javascript类似的语法来访问JSON对象,以实现高效的跨平台开发.(我也使用Py2JS和类似的.)
我正在尝试理解以下代码片段:
class Config(dict):
def __init__(self):
self.__dict__ = self
Run Code Online (Sandbox Code Playgroud)
这条线的目的是self.__dict__ = self
什么?我想它会__dict__
使用简单地返回对象本身的东西来覆盖默认函数,但是由于Config
从dict
I 继承而无法找到与默认行为的任何差异.
python ×9
dictionary ×4
struct ×2
class ×1
getattr ×1
ini ×1
namedtuple ×1
nested ×1
object ×1
oop ×1
pandas ×1
python-3.x ×1
string ×1
syntax ×1
tuples ×1