检索字典的名字我有字典的名单,我想从像一个循环检索他们的名字:的Python:从列表
for d in list_dicts:
print d.name
list_dicts = [dic1, dic2]
d.name = dic1
是否可能,如何?谢谢
检索字典的名字我有字典的名单,我想从像一个循环检索他们的名字:的Python:从列表
for d in list_dicts:
print d.name
list_dicts = [dic1, dic2]
d.name = dic1
是否可能,如何?谢谢
dic1
或dic2
是变量名称。他们没有意义。事实上,你可以这样做:
dic1 = {1:2, 3:4}
dic2 = dic1
list_dicts = [dic1, dic2]
而这里的列表包含两个引用相同的字典!
如果你真的需要一个名字,你可以简单地把它添加到字典中(有点哈克,但只要将正常运行,关键是唯一的):
dic1['name'] = 'dic1'
你可以在包装他们俩类:
class NamedDct(object):
def __init__(self, dct, name):
self.dct = dct
self.name = name
dic1 = NamedDct(dic1, 'dic1')
或者你可以从字典继承(请注意,这是一个退化的例子,没有深入到细节):
class NamedDct(dict):
def __init__(self, name):
self.name = name
super(NamedDct, self).__init__()
dic1_new = NamedDct('dic1')
dic1_new.update(dic1)
我想我会去继承。谢谢 !;) – 2014-09-21 19:07:12
笔记;就像在这个例子中实现的那样,如果这对你来说很重要,你将会在建造时失去所有各种初始化'dict'的东西。 – aruisdante 2014-09-21 19:09:41
@aruisdante真。只是想举一个例子,不要深究。 – Korem 2014-09-21 19:10:58
假如你有这样的字典清单:
DIC1:{ “名”: “名1”,...} DIC2:{ “名”: “名称2”,...}
以及像这样的一个列表: list_dicts = [dic1,dic2]
访问字典字段的方法是文字表示法(带括号)。
for d in list_dicts:
print d["name"]
这似乎并不适用于我,跟随你示例非常精确,我被告知'TypeError:字符串索引必须是整数,而不是str'。看来python想要相信d是一个列表而不是字典。 – jg3 2015-02-24 00:43:58
您可能想要使用namedtuple这样的东西。
命名元组允许构造一个轻量级的名称/数据组合(以元组的Python子类的形式),它非常适合此用例。
假设我们想要一个附在名字上的字典。
(随着verbose=True
整个班级被打印出来以供检查。在正常使用,不包括...)
>>> from collections import namedtuple
>>> NamedDict = namedtuple('NamedDict', 'name data', verbose=True)
class NamedDict(tuple):
'NamedDict(name, data)'
__slots__ =()
_fields = ('name', 'data')
def __new__(_cls, name, data):
'Create new instance of NamedDict(name, data)'
return _tuple.__new__(_cls, (name, data))
@classmethod
def _make(cls, iterable, new=tuple.__new__, len=len):
'Make a new NamedDict object from a sequence or iterable'
result = new(cls, iterable)
if len(result) != 2:
raise TypeError('Expected 2 arguments, got %d' % len(result))
return result
def __repr__(self):
'Return a nicely formatted representation string'
return 'NamedDict(name=%r, data=%r)' % self
def _asdict(self):
'Return a new OrderedDict which maps field names to their values'
return OrderedDict(zip(self._fields, self))
def _replace(_self, **kwds):
'Return a new NamedDict object replacing specified fields with new values'
result = _self._make(map(kwds.pop, ('name', 'data'), _self))
if kwds:
raise ValueError('Got unexpected field names: %r' % kwds.keys())
return result
def __getnewargs__(self):
'Return self as a plain tuple. Used by copy and pickle.'
return tuple(self)
__dict__ = _property(_asdict)
def __getstate__(self):
'Exclude the OrderedDict from pickling'
pass
name = _property(_itemgetter(0), doc='Alias for field number 0')
data = _property(_itemgetter(1), doc='Alias for field number 1')
考虑
>>> nd=NamedDict('dict1', {1:'one', 2:'two'})
>>> nd
NamedDict(name='dict1', data={1: 'one', 2: 'two'})
>>> nd.name
'dict1'
>>> nd.data
{1: 'one', 2: 'two'}
所以,你可以一个名称,然后关联并与列表中的每一对词典一起使用:
LoT=[
('dict1', {1:'one', 2:'two'}),
('dict2', {3:'three', 4:'four'})
]
NamedDict = namedtuple('NamedDict', 'name data')
LoND=[NamedDict(*t) for t in LoT]
for d in LoND:
print(d.name, d.data)
打印:
dict1 {1: 'one', 2: 'two'}
dict2 {3: 'three', 4: 'four'}
您对名称的含义是什么?你的意思是键或值ex:'{key:value}'或者你想要字典的名字?你的代码也有很多错误! – Kasramvd 2014-09-21 18:58:23
我想他是在谈论字典变量名称,'dic1'和'dic2',但这些只是参考,所以,不,你不能得到他们的“名字” – ZekeDroid 2014-09-21 19:02:05