2015-11-18 131 views
0

試圖找出我如何能夠使用列表中理解爲以下幾點:列表理解使用字典條目

我有一本字典:

dict = {} 
dict ['one'] = {"tag":"A"} 
dict ['two'] = {"tag":"B"} 
dict ['three'] = {"tag":"C"} 

,我想創建一個列表(讓我們把它這是由每個每個按鍵的「標籤」值填充「名單」),即

['A', 'B', 'C'] 

是有一個有效的方式做到這一點使用列表理解?我在想這樣的事情:

list = [x for x in dict[x]["tag"]] 

但顯然這不起作用。任何幫助感激!

回答

1

你可以試試這個:就像你正在試圖獲得一些信息了JSON的,你可能想看看

untransformed = { 
    'one': {'tag': 'A'}, 
    'two': {'tag': 'B'}, 
    'three': {'tag': 'C'}, 
    'four': 'bad' 
} 
transformed = [value.get('tag') for key,value in untransformed.items() if isinstance(value, dict) and 'tag' in value] 

它還聽起來:

[i['tag'] for i in dict.values()] 
2

工具試試這個:

d = {'one': {'tag': 'A'}, 
    'two': {'tag': 'B'}, 
    'three': {'tag': 'C'}} 

tag_values = [d[i][j] for i in d for j in d[i]] 

>>> print tag_values 
['C', 'B', 'A'] 

如果事情重要,您可以事後對列表進行排序。

如果你在內部http://stardict.sourceforge.net/Dictionaries.php下載其他鍵/值對,除了「標籤」,您可能需要指定「標籤」鍵,就像這樣:

tag_value = [d[i]['tag'] for i in d if 'tag' in d[i]] 

了相同的結果。如果'標籤'肯定總是存在,請刪除if 'tag' in d[i]部件。

作爲一個附註,從來沒有好主意去調用list'list',因爲它是Python中的保留字。

+1

如果內部的字典有另一個鍵,例如'{'tag':'B','foo':'bar'}'那麼'bar'會在輸出中顯示這是不對的。所以這個解決方案是脆弱的。 – dopstar

+0

@dopstar編輯爲這種可能性 – Totem

+0

我沒有看到OP問題中的任何內容,保證內部字典始終有一個鍵(只有一個鍵),因爲字典是可變的任何事情都可以發生。在知道發生了什麼之前,我們需要閱讀該列表comp,我們知道我們想要'標記'鍵,但是我們仍然在迭代'a'子句。 – dopstar

2

這是一個額外的步驟,但得到所需的輸出,並使用保留字避免:

d = {} 
d['one'] = {"tag":"A"} 
d['two'] = {"tag":"B"} 
d['three'] = {"tag":"C"} 
new_list = [] 
for k in ('one', 'two', 'three'): 
    new_list += [x for x in d[k]["tag"]] 

print(new_list)