我如何使用Python列表执行此操作? (itemgetter?)

时间:2010-02-05 10:36:16

标签: python list dictionary

[{'id':44}, {'name':'alexa'},{'color':'blue'}]

我想在列表中选择“id”。 基本上,我想打印44,因为这是列表中的“id”。

6 个答案:

答案 0 :(得分:5)

这是一个奇怪的数据结构......一个项目词典的列表。

key = 'id'
l = [{'id':44}, {'name':'alexa'},{'color':'blue'}]

print [ x[key] for x in l if key in x ][0]

假设您可以依靠关键存在一次......

也许您应该首先将列表转换为字典:

key = 'id'
l = [{'id':44}, {'name':'alexa'},{'color':'blue'}]

d = {}
for x in l:
    d.update(x)
print d[key]

答案 1 :(得分:4)

所有其他答案解决了您的问题,我只是建议另一种方法来实现这一目标。

您不必在list dict list查询密钥,而是必须遍历所有dict项以获取值,只需使用list list秒。每个键都会映射到dict个值(如果所有data=[{'id':44}, {'name':'alexa'},{'color':'blue'}] 都有不同的键集,则只映射一个值。)

所以,

data={'id':[44], 'name':['alexa'], 'color':['blue']}

变为

'id'

您可以使用data['id']data['id'][0],如果您只需要一个值),则可以整齐地访问dict的值。

如果您的所有密钥在list之间都是不同的(如您的示例所示),则您甚至不必拥有data={'id':44, 'name':'alexa', 'color':'blue'} 的值。

list

这不仅可以使您的代码更清晰,还可以加快您的查询速度,而不再需要迭代{{1}}。

答案 2 :(得分:3)

你可以这样做:

>>> KEY = 'id'
>>>
>>> my_list = [{'id':44}, {'name':'alexa'},{'color':'blue'}]
>>> my_ids = [x[KEY] for x in my_list if KEY in x]
>>> print my_ids
[44]

这显然是您想要的值列表。然后,您可以根据需要打印它们。

答案 3 :(得分:3)

这可能是最好的解决方案:

>>> L = [{'id':44}, {'name':'alexa'},{'color':'blue'}]

>>> newd = {}
>>> for d in L:
...    newd.update(d)
>>> newd['id']
44

答案 4 :(得分:2)

 >>> from itertools import dropwhile
 >>> def find_value(l, key):
 ...    return dropwhile(lambda x: key not in x, l).next()[key]
 >>> find_value([{'id':44}, {'name':'alexa'},{'color':'blue'}], "id")

这将进行线性搜索,但只能在找到元素之前进行。

如果您想要正确处理错误,请使用:

def find_value(l, key):
    try:
        return dropwhile(lambda x: key not in x, l).next()[key]
    except StopIteration:
        raise ValueError(key)

答案 5 :(得分:0)

>>> L = [{'id':44}, {'name':'alexa'},{'color':'blue'}]
>>> newd=dict(d.items()[0] for d in L)
>>> newd['id']
44