[英]How do I do this with Python list? (itemgetter?)
[{'id':44}, {'name':'alexa'},{'color':'blue'}]
我想在列表中选择“id”中的任何内容。 基本上,我想打印44,因为这是列表中的“id”。
这是一个奇怪的数据结构......一个项目词典的列表。
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]
所有其他答案解决了你的问题,我只是建议另一种方法来做这件事。
取代具有的list
的dict
是你要重的关键查询和必须遍历所有list
项得到的值,只需使用一个dict
的list
秒。 每个键都会映射到一个值list
(如果你的所有dict
都有不同的键集,则只有一个值)。
所以,
data=[{'id':44}, {'name':'alexa'},{'color':'blue'}]
变
data={'id':[44], 'name':['alexa'], 'color':['blue']}
如果你只需要一个值,你可以使用data['id']
(或data['id'][0]
整齐地访问'id'
值。
如果您的所有键在dict
都是不同的(如您的示例中所示),您甚至不必拥有值list
。
data={'id':44, 'name':'alexa', 'color':'blue'}
这不仅可以使您的代码更清晰,而且还可以加快您的查询速度,而这些查询不再需要遍历list
。
你可以这样做:
>>> 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]
这显然是您想要的值列表。 然后,您可以根据需要打印它们。
可能这是最好的解决方案:
>>> L = [{'id':44}, {'name':'alexa'},{'color':'blue'}]
>>> newd = {}
>>> for d in L:
... newd.update(d)
>>> newd['id']
44
>>> 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)
>>> L = [{'id':44}, {'name':'alexa'},{'color':'blue'}]
>>> newd=dict(d.items()[0] for d in L)
>>> newd['id']
44
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.