如何在Python中访问索引、键和值

如何在Python中访问索引、键和值,python,Python,我有一台发电机: def get_items(self): for item in self.info.get_data(): item = { '_name': item.name, '_email': item.email, } yield item 我想迭代这个生成器,将索引分配给每个项键,然后将它们存储在dict中,如下所示: 我使用

我有一台发电机:

def get_items(self):
        for item in self.info.get_data():
            item = {
                '_name': item.name,
                '_email': item.email,
            }
            yield item
我想迭代这个生成器,将索引分配给每个项键,然后将它们存储在dict中,如下所示:

我使用enumerate获取索引,但无法访问项的键向其添加索引:

items = []
for i, item in enumerate(self.get_items()):
    items['item_'.join(str(i)).join(self.get_items()[i])] = item
但是我得到了:

TypeError: 'generator' object has no attribute '__getitem__
有什么类似于蟒蛇的方法可以做到这一点吗?

尝试以下方法:

items = []
for i, item in enumerate(self.get_items()):
    items.append({'item_{}{}'.format(i, k): v for k, v in item.iteritems()})
items = {} # Items is now a dictionary
for i, item in enumerate(self.get_items()):
    items.update({'item_{}{}'.format(i, k): v for k, v in item.iteritems()})
列表演示:

In [54]: for i, j in enumerate(get_items(test)):
    items.append({'item_{}{}'.format(i, k): v for k, v in j.iteritems()})
   ....:     

In [55]: items
Out[55]: 
[{'item_0_email': 'example@email.com', 'item_0_name': 'example_name'},
 {'item_1_email': 'ex@email.com', 'item_1_name': 'Some name'}]
我假设您实际想要做的是将这些字典附加到列表中,因为,项目定义为列表。否则,如果要将它们添加到词典中,请执行以下操作:

items = []
for i, item in enumerate(self.get_items()):
    items.append({'item_{}{}'.format(i, k): v for k, v in item.iteritems()})
items = {} # Items is now a dictionary
for i, item in enumerate(self.get_items()):
    items.update({'item_{}{}'.format(i, k): v for k, v in item.iteritems()})
字典演示

In [56]: items = {}

In [57]: for i, j in enumerate(get_items(test)):
    items.update({'item_{}{}'.format(i, k): v for k, v in j.iteritems()})
   ....:     

In [58]: items
Out[58]: 
{'item_0_email': 'example@email.com',
 'item_0_name': 'example_name',
 'item_1_email': 'ex@email.com',
 'item_1_name': 'Some name'}
记住self.get_项生成字典。这意味着你必须处理字典中的所有条目。上述方法正是这样做的

代码使用。它们类似于列表理解,但在本例中,迭代self.get_项生成器生成的每个字典的键和值

尝试以下操作:

items = []
for i, item in enumerate(self.get_items()):
    items.append({'item_{}{}'.format(i, k): v for k, v in item.iteritems()})
items = {} # Items is now a dictionary
for i, item in enumerate(self.get_items()):
    items.update({'item_{}{}'.format(i, k): v for k, v in item.iteritems()})
列表演示:

In [54]: for i, j in enumerate(get_items(test)):
    items.append({'item_{}{}'.format(i, k): v for k, v in j.iteritems()})
   ....:     

In [55]: items
Out[55]: 
[{'item_0_email': 'example@email.com', 'item_0_name': 'example_name'},
 {'item_1_email': 'ex@email.com', 'item_1_name': 'Some name'}]
我假设您实际想要做的是将这些字典附加到列表中,因为,项目定义为列表。否则,如果要将它们添加到词典中,请执行以下操作:

items = []
for i, item in enumerate(self.get_items()):
    items.append({'item_{}{}'.format(i, k): v for k, v in item.iteritems()})
items = {} # Items is now a dictionary
for i, item in enumerate(self.get_items()):
    items.update({'item_{}{}'.format(i, k): v for k, v in item.iteritems()})
字典演示

In [56]: items = {}

In [57]: for i, j in enumerate(get_items(test)):
    items.update({'item_{}{}'.format(i, k): v for k, v in j.iteritems()})
   ....:     

In [58]: items
Out[58]: 
{'item_0_email': 'example@email.com',
 'item_0_name': 'example_name',
 'item_1_email': 'ex@email.com',
 'item_1_name': 'Some name'}
记住self.get_项生成字典。这意味着你必须处理字典中的所有条目。上述方法正是这样做的


代码使用。它们类似于列表理解,但在本例中,迭代self.get_项生成器生成的每个字典的键和值

您得到的错误是由于self.get_items是一个生成器,而此类对象不允许执行self.get_items[1]之类的操作,因为就意义而言,没有历史记录

但在您的情况下,您只是错过了self.get_项在每次调用时生成一个dict。你只需要利用这句话:

items = []
for i, item_dict in enumerate(self.get_items()):
    for key, item in item_dict:
        items['item_{0}{1}'.format(i, key)] = item
顺便说一下,您还有一个我在上面的示例中没有纠正的严重错误:items是一个列表,因此您尝试执行items[some\u not\u defined\u string]=某些操作将失败,首先是因为索引是str类型,其次是因为您无法通过指定新索引将内容附加到列表中


此外,对“item_u2;”.jointri.join[…]的调用并不是您所期望的:str.jointerable返回一个由给定str分隔的iterable项组成的字符串。它不会生成多个字符串,并且肯定不会为您的items dict生成多个键。

您得到的错误是由于self.get_items是一个生成器,而且这些物体不允许做像“自我”这样的事情,因为就意义而言,没有历史

但在您的情况下,您只是错过了self.get_项在每次调用时生成一个dict。你只需要利用这句话:

items = []
for i, item_dict in enumerate(self.get_items()):
    for key, item in item_dict:
        items['item_{0}{1}'.format(i, key)] = item
顺便说一下,您还有一个我在上面的示例中没有纠正的严重错误:items是一个列表,因此您尝试执行items[some\u not\u defined\u string]=某些操作将失败,首先是因为索引是str类型,其次是因为您无法通过指定新索引将内容附加到列表中


此外,对“item_u2;”.jointri.join[…]的调用并不是您所期望的:str.jointerable返回一个由给定str分隔的iterable项组成的字符串。它不会生成多个字符串,也肯定不会为您的items dict生成多个键。

,OP对于条目是列表还是词典,显然不清楚。这对要使用的算法有很大影响-显而易见,OP显然不清楚条目是列表还是词典。这对要使用的算法有很大影响-