我有dictionaries-如何獲得辭典Python列表匹配給定的標準
[{"id":1,"name":"abc"},{"id":2,"name":"def"},{"id":3,"name":"xyz"}]
我想要得到的字典其中id = 1,並將其存儲在一個variable.Something喜歡 - 列表
element = {"id":1,"name":"abc"}
我不想用for循環遍歷列表然後獲取元素。
我有dictionaries-如何獲得辭典Python列表匹配給定的標準
[{"id":1,"name":"abc"},{"id":2,"name":"def"},{"id":3,"name":"xyz"}]
我想要得到的字典其中id = 1,並將其存儲在一個variable.Something喜歡 - 列表
element = {"id":1,"name":"abc"}
我不想用for循環遍歷列表然後獲取元素。
無論你做什麼,你都必須遍歷該列表。
g = (e for e in elements if e.get('id') == 1)
element = next(g)
這個實現的好處是它只是根據需要迭代以找到下一個匹配元素。
好的,+1,另一件好事,就是你可以給'next'一個默認值,也許是一個空字典:'element = next(g,dict())' – Bahrom
您正在解決的問題稱爲索引。如果你對先驗匹配標準一無所知,那麼你就無能爲力,你必須做循環。最簡單的實現是:
my_obj = next(obj for obj in my_list if my_criterium(obj))
凡在你的情況下
my_criterium = lambda obj: obj['id'] == 1
但是,如果你知道你將永遠id
進行搜索,那麼你可以創建一個索引:
my_index = {obj['id']: obj for obj in my_list}
然後檢索就像
my_obj = my_index[1]
不再需要循環(因此速度很快)。
這是在假設id
在每個對象上都是唯一的(這個假設不是殘餘的,你可以通過爲每個id
存儲一個匹配元素的列表來創建一個不同的索引)。另一個缺點是很難保持索引和列表之間的一致性。
但無論您選擇何種路徑,都無法從循環中逃脫。
Dicts = [{"id":1,"name":"abc"},{"id":2,"name":"def"},{"id":3,"name":"xyz"}]
for d in Dicts:
if d.get('id') == 1:
element = d
print element
您可以使用一個for循環將字典列表的id存儲到另一個字典中。當你有多個查詢時,這會更快。
In [1]: d = [{"id":1,"name":"abc"},{"id":2,"name":"def"},{"id":3,"name":"xyz"}]
In [2]: indices = {v["id"] : index for index, v in enumerate(d)}
In [3]: element = d[indices[1]]
In [4]: print(element)
{'id': 1, 'name': 'abc'}
In [5]: element = d[indices[3]]
In [6]: print(element)
{'id': 3, 'name': 'xyz'}
我想我有一個解決方案。
基本上,你將列表轉換成一個字符串,然後你用它來玩一個單一的字典。 雖然,我認爲在列表上循環會更好。
l = [{"id":1,"name":"abc"},{"id":2,"name":"def"},{"id":3,"name":"xyz"}]
#convert to string
a = str(l)
#remove parenthesis and curly brackets
a = a.replace('{','').replace('}','').replace('[','').replace(']','').replace(' ','')
#remove 'id' and 'name'
a = a.replace("'id':",'').replace(",'name'",'')
#add curly brackets
a = '{'+a+'}'
#make a dict
exec('a='+a)
>>>a
{1: 'abc', 2: 'def', 3: 'xyz'}
正如你所看到的,你最終會得到一個帶有正確的鍵/值對的單個字典,而不需要使用一個for循環!
首先,你所擁有的實際上是一個'SyntaxError':詞典之間沒有逗號','。除此之外,沒有其他選擇。即使您將列表轉換爲其他結構,仍然需要轉換的循環。 – freakish
以及它是一個列表。編輯這個問題有','。我正在尋找使用「in」運算符的某種方式,或者可能是其他運算符。 – aaj
爲什麼你不想循環? –