簡體   English   中英

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

[英]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]

所有其他答案解決了你的問題,我只是建議另一種方法來做這件事。

取代具有的listdict是你要重的關鍵查詢和必須遍歷所有list項得到的值,只需使用一個dictlist秒。 每個鍵都會映射到一個值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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM