如何使用Python列表实现这一点?(项目获取者?)

如何使用Python列表实现这一点?(项目获取者?),python,list,dictionary,Python,List,Dictionary,我想在列表中选择任何“id”。 基本上,我想打印44,因为这是列表中的“id”。您可以这样做: [{'id':44}, {'name':'alexa'},{'color':'blue'}] 这显然是您想要的值的列表。然后您可以根据需要打印它们。这是一个奇怪的数据结构。。。单条字典的列表 >>> KEY = 'id' >>> >>> my_list = [{'id':44}, {'name':'alexa'},{'color':'blue'}

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

您可以这样做:

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

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

这是一个奇怪的数据结构。。。单条字典的列表

>>> 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]
假设你可以相信钥匙只存在一次

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

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

print [ x[key] for x in l if key in x ][0]
这将进行线性搜索,但仅在找到元素之前

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

 >>> 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")

所有其他的答案都能解决你的问题,我只是在建议另一种解决方法

不要使用
dict
s的
list
来查询键,并且必须迭代所有
list
项以获取值,只需使用
list
s的
dict
。每个键都将映射到值的
列表
(如果所有
dict
都有不同的键集,则仅映射一个值)

所以

变成

data=[{'id':44}, {'name':'alexa'},{'color':'blue'}]
您还可以使用
数据['id']
(或者
数据['id'][0]
(如果您只需要一个值),方便地访问
'id'
的值

如果您的所有键在
dict
s中都是不同的(如您的示例所示),那么您甚至不必有
列表
s个值

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

这不仅使您的代码更干净,还加快了您的查询速度,这些查询不再需要在
列表上迭代

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

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

如果每个元素中总是只有一个键,那么最好使用元组。托尔斯滕的建议不仅有意义,而且可以简化问题,因为有了这个:
L=[('id',44),('name','alexa'),('color','blue')]
,你就可以这样做:
dict(L)['id']
可以通过编辑来细化问题
是“id”
。因为“id”、“name”或“color”和项目的对象标识不相似,但python中的
is
意味着搜索对象标识。即使我推测您不是指“是”的意思,问题似乎也不太清楚。您可以使用next(generator,def_val)代替generator.next()。当达到StopIteration时,后一种方法将返回一个def_val,因此您不需要将其包装在try\catch块中。但是,您必须检查默认值,因为找不到元素是异常的,除非函数也应该扩展为包含默认值。好建议,也许是因为它回答了这个问题?_key已经弃用了,但仍然有效…已经弃用了4.5年,当然它在py3k中根本不存在。因此,我不认为它仍然有效。我想知道为什么
has_key
不会在2.6中触发弃用警告:(或者
newd=dict(tuple(d.items())表示L中的d)
data={'id':[44], 'name':['alexa'], 'color':['blue']}
data={'id':44, 'name':'alexa', 'color':'blue'}
>>> L = [{'id':44}, {'name':'alexa'},{'color':'blue'}]

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